我写了一个小型库,可以在浏览器和服务器上运行。该库依次使用作为CommonJS模块发布的npm库(例如lodash.isequal
)。
我想以两种不同的方式编译库:
tsc
生成commonjs
模块以在服务器上使用awesome-typescript-loader
,为webpack生成es6
模块进行捆绑根据docs,导入覆盖module.exports
的CommonJS库的正确方法如下:
import isEqual = require('lodash.isequal');
然而,对于第二个编译案例,typescript抱怨
错误TS1202:定位ECMAScript模块时无法使用导入分配。考虑使用'import * as ns from“mod”','import {a} from“mod”','import d from“mod”'或其他模块格式。
通过将其导入为:
,我设法让代码生成正常工作import * as isEqual from 'lodash.isequal';
但这需要禁用类型检查,因为否则打字机会出现如下错误:
错误TS2497:模块'“/ home / users / tt-mod-test / node_modules / @ type / lodash.isequal / index”'解析为非模块实体,无法使用此结构导入。
答案 0 :(得分:0)
从TypeScript 2.7开始,可以使用合成默认导入来解决此问题。使用esModuleInterop
标志,可以像babel和webpack一样导入isEqual
(和类似的模块):
import isEqual from 'lodash.isequal';
对于module
选项设置为es6
的webpack,导入将保持原样,webpack本身将处理合成默认值。对于节点,module
设置为CommonJS
,相应的发射将为const lodash_isequal_1 = __importDefault(require("lodash.isequal"));
,其中__importDefault
处理像Babel