我正在尝试按照update.angular.io迁移指南将项目更新为Angular 9。执行ng update @angular/core @angular/cli
后,执行ng build --prod
时,执行ng build
后出现错误“无法读取未定义的属性'length'的错误”。 ng build --aot
也在工作。
npm日志给出以下输出
0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/node', '/usr/bin/npm', 'run', 'build', '--prod' ]
2 info using npm@6.14.3
3 info using node@v10.18.0
4 verbose run-script [ 'prebuild', 'build', 'postbuild' ]
5 info lifecycle my-project@0.1.0~prebuild: my-project@0.1.0
6 info lifecycle my-project@0.1.0~build: my-project@0.1.0
7 verbose lifecycle my-project@0.1.0~build: unsafe-perm in lifecycle true
8 verbose lifecycle my-project@0.1.0~build: PATH: /usr/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/path/to/project/my-project/subproject/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
9 verbose lifecycle my-project@0.1.0~build: CWD: /path/to/project/my-project/subproject
10 silly lifecycle my-project@0.1.0~build: Args: [ '-c', 'ng build --prod' ]
11 silly lifecycle my-project@0.1.0~build: Returned: code: 1 signal: null
12 info lifecycle my-project@0.1.0~build: Failed to exec build script
13 verbose stack Error: my-project@0.1.0 build: `ng build --prod`
13 verbose stack Exit status 1
13 verbose stack at EventEmitter.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:332:16)
13 verbose stack at EventEmitter.emit (events.js:198:13)
13 verbose stack at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
13 verbose stack at ChildProcess.emit (events.js:198:13)
13 verbose stack at maybeClose (internal/child_process.js:982:16)
13 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
14 verbose pkgid my-project@0.1.0
15 verbose cwd /path/to/project/my-project/subproject
16 verbose Linux 4.15.0-54-generic
17 verbose argv "/usr/bin/node" "/usr/bin/npm" "run" "build" "--prod"
18 verbose node v10.18.0
19 verbose npm v6.14.3
20 error code ELIFECYCLE
21 error errno 1
22 error my-project@0.1.0 build: `ng build --prod`
22 error Exit status 1
23 error Failed at the my-project@0.1.0 build script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 1, true ]
为解决该问题,我更新了npm,但无济于事。我也通过设置
关闭了所有的角度编译器检查 "fullTemplateTypeCheck": false,
"strictInjectionParameters": false
tsconfig.json中的。这也没有用。删除node_modules和package-lock.json并创建新的npm install
也不能解决问题。
npm version is 6.14.3
node version is 10.18.0
答案 0 :(得分:1)
我发现,更改angular.json
的配置可以解决问题。
在我拥有之前:
"optimization": true
我将其更改为:
"optimization": { "scripts": true, "styles": false }
现在它正在生产模式下构建。这不是真正的解决方案,而是一种解决方法。因此,如果有人知道如何解决问题并保持样式优化,请与我分享。
答案 1 :(得分:0)
Angular 9附带Ivy,并启用了默认aot。我也遇到了问题,我从angular.json中删除了我的构建配置中的所有“ aot”或“ buildOptimizer”设置。 例如:用于产品构建的生产配置。另外,请确保您在清理node_modules后尝试进行npm安装,如果一次执行不起作用。
可能是您遇到了一些依赖关系,这些依赖关系存在优化问题。这个技巧应该起作用。
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"budgets": [
{
"type": "initial",
"maximumWarning": "2mb",
"maximumError": "5mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "6kb",
"maximumError": "10kb"
}
]
},