最终,我成功解决了问题。
代码中有一个不受控制的const _ = require("lodash")
,一旦我删除它,问题就迎刃而解。
值得一提的是:
- 由于node.js内存限制(1.7GB RAM),
ngc
命令使用node --max-old-space-size=8192 ./node_modules/.bin/ngc -p tsconfig-aot.json
运行
- 同样地,为了同样的原因,
rollup
使用node --max-old-space-size=8192 ./node_modules/.bin/rollup -c rollup-config.js
运行
根据您的项目大小和计算机内存大小,您可以尝试使用--max-old-memory=4096
来解决问题。
至于我的rollup-config.js文件,虽然我不确定这里是否真的需要所有内容,但以下是对我有效的内容:
import builtins from 'rollup-plugin-node-builtins';
import nodeResolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
import uglify from 'rollup-plugin-uglify';
export default {
entry: 'app/app.aot.js',
dest: 'www/bundle.js',
sourceMap: false,
format: 'iife',
plugins: [
nodeResolve({
jsnext: true,
module: true,
browser: true
}),
commonjs({
include: [
'node_modules/**',
'node_modules/primeng/**',
'node_modules/moment/**',
'node_modules/rxjs/**',
'node_modules/lodash/**'
],
exclude: ['node_modules/ws/**'],
extensions: ['.js'],
ignoreGlobal: false,
namedExports: {
'node_modules/primeng/primeng.js': [
'PanelModule',
'InputSwitchModule',
'InputMaskModule',
'ProgressBarModule',
'DropdownModule',
'CalendarModule',
'InputTextModule',
'DataTableModule',
'DataListModule',
'ButtonModule',
'DialogModule',
'AccordionModule',
'RadioButtonModule',
'ToggleButtonModule',
'CheckboxModule',
'SplitButtonModule',
'ToolbarModule',
'SelectButtonModule',
'OverlayPanelModule',
'TieredMenuModule',
'GrowlModule',
'ChartModule',
'Checkbox',
'Dropdown',
'Calendar',
'DataGridModule',
'DataTable',
'MultiSelectModule',
'TooltipModule',
'FileUploadModule',
'TabViewModule',
'AutoCompleteModule'
],
'node_modules/ng2-uploader/index.js': ['Ng2Uploader']
},
sourceMap: false,
}),
builtins(),
uglify()
]
}
rollup
仍然会抱怨某些包中的默认导入,可以通过使用命名导出来解决(如果您真的想要),但即使有这些警告,一切似乎都在运行。
至于我的“最终” tsconfig.json:
{
"compilerOptions": {
"lib": ["es2015", "dom"],
"target": "es5",
"module": "es2015",
"moduleResolution": "node",
"declaration": false,
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": true,
"noImplicitAny": false,
"watch": false,
"skipLibCheck": true,
"allowSyntheticDefaultImports": true,
"suppressImplicitAnyIndexErrors": true,
"baseUrl": ".",
"typeRoots": [
"./node_modules/@types",
"./node_modules"
],
"types": [
"node",
"lodash",
"jasmine",
"bluebird",
"socket.io-client"
]
},
"compileOnSave": false,
"buildOnSave": false,
"files": [
"app/app.module.ts",
"app/app.aot.ts"
],
"angularCompilerOptions": {
"genDir": "compiled",
"skipMetadataEmit": true
}
}
最后,这两个链接也有助于理解幕后发生了什么:
希望这能帮助到某些人。
source-map-explorer
并通过 Angular 文档检查你的build.js
文件吗?在我的版本(2.4.5)中,我注意到编译器仍然是捆绑包的一部分,而它不应该是。 - joh04667aot/node_modules
(或者在你的情况下是app/node_modules
)中。 - joh04667