javascript - 将外部库导入到 Angular 2 (Systemjs)

标签 javascript angular systemjs

我正在尝试使用 this library在我的 Angular 2 项目中。我试过了: npm install search-query-parse --save 然后:

  1. Adding via <script> in index.ts - 不明白export在文件中(可以理解)

  2. 通过 RequireJS 添加,将其添加到配置文件中,然后使用 import { searchQuery} from 'search-query-parser'; - 我可以看到该文件是通过网络检查器加载的,尽管我无法使用它......我得到 Unhandled Promise rejection: (SystemJS) Can't resolve all parameters

我错过了什么?

编辑:

这是我的 system-config.ts (相关部分...)

map: {
  'search-query-parser': 'npm:search-query-parser'    
},
packages: {
  'search-query-parser': { main: './index.js', defaultExtension: 'js'
}

最佳答案

这很大程度上取决于您的情况下的模块本身。

有多种方法可以解决此问题,但在这种情况下最简单的方法是使用:

import * as searchQuery from 'search-query-parse'

这将解决问题,因为它将导入 searchQuery 常量中的所有内容,因此您将使用:

searchQuery.parse(params)

因为该库公开了 .parse 方法。

或者,您也可以仅导入解析方法:

import { parse } from 'search-query-parse'

并将其用作parse(params)

这是因为方括号表示法 ({}) 将准确查找由暴露方括号中提供的名称的模块导出的方法/属性。

如果两种方法都没有成功,则很可能 SystemJS 根本没有包含该模块(但是,在这种情况下应该显示错误)。 对于此类问题有多种修复方法(其中之一是搜索实际上与 typescript 兼容的节点或 SystemJS 模块),但最简单的方法是查找包含 systemjs 配置的 HTML 文件,找到包装器(System.import(app)),并且在此类调用之前,自行定义模块:

System.set("search-query-parse", System.newModule(require('search-query-parse'));

通过这种方式,您告诉 SystemJS,在运行时,它需要使节点模块“search-query-parse”在“search-query-parse”下可用,因此在 typescript 中使用他普通风格的 require :

const sqp = require('search-query-parser');

请注意,还有其他方法可以解决此类问题(通常通过 systemjs 文件),但是这些可能是最简单且可移植的方法。

关于javascript - 将外部库导入到 Angular 2 (Systemjs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41694469/

相关文章:

javascript - Vue-test-utils 包装器未定义

javascript - 如何使用正则表达式向 JavaScript 中的搜索模式添加基本样式?

javascript - 使用 electron 和 Systemjs 导入 Node 模块

javascript - 将下划线导入 Angular 2 CLI 项目

javascript - Rails Javascript 压缩/缩小 respond_to javascript 响应?

javascript - D3 X 轴文本和刻度线不可见

Angular 2 ngIf 可观察?

asp.net - 在 ASP.Net MVC 中使用 @Html.AntiForgeryToken() 提供 CSRF token 的替代方法

angular - 如何在 Angular 2 (TypeScript) 中获取正确的引用变量值?

json - 为 karma 单元测试获取 json 文件