angular - Rollup 和 Redux:“index.js 没有导出默认值”
我已经将我的 Ionic 应用从 beta 11 更新到 rc0。这意味着我已经从 Angular2 rc4 切换到 Angular2 稳定版,从 TypeScript 1.8 升级到 2,并使用 RollupJS 模块打包器。
我有一个 redux 架构,并且正在使用 Redux 库。
我无法编译,并且收到此错误:
错误:模块 c:\XXX\node_modulesedux\node_modules\symbol-observable\index.js 没有默认导出(由 c:\XXX\node_modulesedux\es\createStore.js 导入)
在 Module.trace (c:\XXX\node_modulesollup\distollup.js:7677:29)
在 ModuleScope.findDeclaration (c:\XXX\node_modulesollup\distollup.js:7300:22)
在 Scope.findDeclaration (c:\XXX\node_modulesollup\distollup.js:5351:39)
在 Scope.findDeclaration (c:\XXX\node_modulesollup\distollup.js:5351:39)
在 Identifier.bind (c:\XXX\node_modulesollup\distollup.js:6489:29)
在 c:\XXX\node_modulesollup\distollup.js:5151:50
在 MemberExpression.eachChild (c:\XXX\node_modulesollup\distollup.js:5168:5)
在 MemberExpression.bind (c:\XXX\node_modulesollup\distollup.js:5151:7)
在 MemberExpression.bind (c:\XXX\node_modulesollup\distollup.js:6693:24)
在 c:\XXX\node_modulesollup\distollup.js:5151:50
有人知道发生了什么吗?有人可以给我一些建议吗?我不太明白该如何处理这个问题。
这是我在 rollup.config.js 中的内容
var ngTemplate = require('../dist/plugins/ng-template').ngTemplate;
var nodeResolve = require('rollup-plugin-node-resolve');
var commonjs = require('rollup-plugin-commonjs');
// https://github.com/rollup/rollup/wiki/JavaScript-API
module.exports = {
/**
* entry: The bundle's starting point. This file will
* be included, along with the minimum necessary code
* from its dependencies
*/
entry: './.tmp/app/main.dev.js',
/**
* sourceMap: If true, a separate sourcemap file will
* be created.
*/
sourceMap: true,
/**
* format: The format of the generated bundle
*/
format: 'iife',
/**
* dest: the output filename for the bundle in the buildDir
*/
dest: 'main.js',
// Add this to avoid Eval errors
useStrict: false,
/**
* plugins: Array of plugin objects, or a single plugin object.
* See https://github.com/rollup/rollup/wiki/Plugins for more info.
*/
plugins: [
ngTemplate(),
commonjs({
include: [
'node_modules/rxjs/**',
'node_modules/firebase/**',
'node_modules/angularfire2/**'
],
namedExports: {
'node_modules/firebase/firebase.js': ['initializeApp', 'auth', 'database'],
'node_modules/angularfire2/node_modules/firebase/firebase-browser.js': ['initializeApp', 'auth', 'database']
}
}),
nodeResolve({
module: true,
jsnext: true,
main: true,
browser: true,
extensions: ['.js']
})
]
};
答案#1
错误的第一部分...
错误:模块 c:\XXX\node_modulesedux\node_modules\symbol-observable\index.js 没有默认导出
...表示 symbol-observable\index.js 没有 export default 语句。这是因为它是一个 CommonJS 模块——其全部内容如下:
module.exports = require('./lib/index');
所以你需要将其从 CommonJS 转换为 ES。你已经设置好了 rollup-plugin-commonjs,所以希望只是重新配置的问题。目前,只有 rxjs、firebase 和 angularfire2 内的模块正在被转换。
通常最好是直接包含所有的 node_modules,因为这样你就不必手动包含像 symbol-observable 这样的依赖的依赖项:
plugins: [
ngTemplate(),
commonjs({
include: [
'node_modules/**'
],
namedExports: {
'node_modules/firebase/firebase.js': ['initializeApp', 'auth', 'database'],
'node_modules/angularfire2/node_modules/firebase/firebase-browser.js': ['initializeApp', 'auth', 'database']
}
}),
nodeResolve(...)
任何位于 node_modules 中的、不是 CommonJS 的文件都将直接通过该插件而不被更改。
