我最近将我的Ionic2项目从2.0.0-beta.11
更新为2.0.0-rc.0
。我使用的是Immutable.js(版本^ 3.8.1)。由于更新,我在Ionic Serve命令期间遇到以下错误:
[16:50:23] bundle dev started ...
[16:50:40] Error: Module /myproject/node_modules/immutable/dist/immutable.js does not export Map (imported by /myproject/.tmp/effects/catalog.effects.js)
at Module.trace (/myproject/node_modules/rollup/dist/rollup.js:7677:29)
at ModuleScope.findDeclaration (/myproject/node_modules/rollup/dist/rollup.js:7300:22)
at Scope.findDeclaration (/myproject/node_modules/rollup/dist/rollup.js:5351:39)
at Scope.findDeclaration (/myproject/node_modules/rollup/dist/rollup.js:5351:39)
at Scope.findDeclaration (/myproject/node_modules/rollup/dist/rollup.js:5351:39)
at Scope.findDeclaration (/myproject/node_modules/rollup/dist/rollup.js:5351:39)
at CallExpression.bind (/myproject/node_modules/rollup/dist/rollup.js:5826:28)
at /myproject/node_modules/rollup/dist/rollup.js:5151:50
at ReturnStatement.eachChild (/myproject/node_modules/rollup/dist/rollup.js:5168:5)
at ReturnStatement.bind (/myproject/node_modules/rollup/dist/rollup.js:5151:7)
我不知道是否需要在app.module.ts文件中添加一些内容。我可能会错过一些东西。
感谢。
答案 0 :(得分:2)
在不了解您的项目和设置的情况下,很难确切地知道问题和解决方案是什么,错误消息......
错误:模块/myproject/node_modules/immutable/dist/immutable.js不导出Map
...给我们一个线索。 That file是一个UMD模块,默认情况下,Rollup只能理解JavaScript模块(使用import
/ export
声明)。我们可以使用rollup-plugin-commonjs转换它,但在这种情况下需要额外的步骤,因为Rollup无法知道Immutable有一个名为Map
的导出而没有实际运行代码。 (在某些情况下,它会弄清楚 - 当一个模块有例如exports.foo = bar
时,它会添加一个名为foo
的导出,但是Immutable做的事情会有所不同。)
所以我们通过在rollup-plugin-commonjs中使用namedExports
选项来帮助它:
plugins: [
commonjs({
include: 'node_modules/**',
namedExports: {
'node_modules/immutable/dist/immutable.js': [ 'Map', 'Set', ... ]
}
}),
...
]
这是不幸的,但是必要的,因为CommonJS模块的语义与ES模块根本不同。
答案 1 :(得分:1)
那是core issue,他需要an update。