我正在使用 Typescript、ES6 模块语法和 SystemJS / builder。
我想要做的基本要求是:
- 使用 @types 包启用打字稿代码完成(也适用于全局 npm 安装)
- 使用 ES6 模块导入语法(例如
import * as _ from 'lodash'
) - 让构建器从构建中排除全局变量,并在开发/生产中使用 CDN url 正确导入它们。
我用于构建和开发/生产环境的配置只是为了让它运行起来:
System.config({
meta: {
"lodash": {
"format": "global",
"build": false,
"exports": "_"
}
// ...more meta
},
map: {
"lodash": "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js",
// ...more maps
}
});
从这里我有一个 npm 任务,它转译为 ES6,然后通过 babel 插件将所有内容捆绑到一个文件中。该脚本直接加载到生产页面上并加载。问题是,一旦全局依赖项导入,由于 systemjs 将 CDN 导入与像
{default: _ } //_ is the actual lodash export
我已经成功地将导入更改为,import _ from 'lodash'
但随后出现 IDE 错误,因为 lodash(也没有任何其他全局脚本,如 angular)没有导出默认值,并且我失去了代码完成。
在这里使用 systemjs / builder 满足要求的正确方法是什么?
作为旁注,如果效果更好,我可以使用脚本标签加载而不是 systemjs CDN 导入。