Angular 通用内部 docker: 无法读取未定义的 属性 'getOptionsDiagnostics'
Angular Universal inside docker: Cannot read property 'getOptionsDiagnostics' of undefined
我有 Angular 启用了通用渲染的 5.2 应用程序(主要根据 this article 实现)。一切都适用于我的本地环境,但是当我尝试在 docker 中构建应用程序时,它失败并出现此错误:
$ node --max-old-space-size=4096 ./node_modules/.bin/webpack -p
/app/node_modules/typescript/lib/typescript.js:91633
return program.getOptionsDiagnostics(cancellationToken).concat(program.getGlobalDiagnostics(cancellationToken));
^
TypeError: Cannot read property 'getOptionsDiagnostics' of undefined
at Object.getCompilerOptionsDiagnostics (/app/node_modules/typescript/lib/typescript.js:91633:28)
at provideCompilerOptionDiagnosticErrorsToWebpack (/app/node_modules/ts-loader/dist/after-compile.js:39:29)
at Compiler.<anonymous> (/app/node_modules/ts-loader/dist/after-compile.js:17:9)
at next (/app/node_modules/tapable/lib/Tapable.js:204:14)
at Compiler.<anonymous> (/app/node_modules/webpack/lib/CachePlugin.js:78:5)
...
我尝试使用 node:carbon
图像构建并使用 ubuntu:16.04
+ 通过 apt
安装 node
,两个图像中的错误相同。
此错误是在构建的最后阶段引起的,我在该阶段使用 webpack 构建服务器应用程序 ($ node --max-old-space-size=4096 ./node_modules/.bin/webpack -p
)。
我使用 webpack 3.11,配置如下:
const path = require('path');
const nodeExternals = require('webpack-node-externals');
module.exports = {
entry: {
server: './src/server.ts',
},
resolve: {
extensions: ['.ts', '.js'],
alias: {
'main.server': path.join(__dirname, 'dist', 'server', 'main.bundle.js'),
},
},
target: 'node',
externals: [nodeExternals({
whitelist: [
/^@ng-bootstrap\/ng-bootstrap/,
/ngx-translate-messageformat-compiler/,
],
})],
output: {
path: path.join(__dirname, 'dist'),
filename: '[name].js',
},
module: {
rules: [
{ test: /\.ts$/, loader: 'ts-loader' },
],
},
};
自己找到了一个解决方案,在 webpack 配置中我启用了 ts-loader
的 transpileOnly
选项,这个错误神奇地消失了。在这种情况下,代码已经过类型检查,所以无论如何都不需要。
{ test: /\.ts$/, loader: 'ts-loader', options: { transpileOnly: true } },
我有 Angular 启用了通用渲染的 5.2 应用程序(主要根据 this article 实现)。一切都适用于我的本地环境,但是当我尝试在 docker 中构建应用程序时,它失败并出现此错误:
$ node --max-old-space-size=4096 ./node_modules/.bin/webpack -p
/app/node_modules/typescript/lib/typescript.js:91633
return program.getOptionsDiagnostics(cancellationToken).concat(program.getGlobalDiagnostics(cancellationToken));
^
TypeError: Cannot read property 'getOptionsDiagnostics' of undefined
at Object.getCompilerOptionsDiagnostics (/app/node_modules/typescript/lib/typescript.js:91633:28)
at provideCompilerOptionDiagnosticErrorsToWebpack (/app/node_modules/ts-loader/dist/after-compile.js:39:29)
at Compiler.<anonymous> (/app/node_modules/ts-loader/dist/after-compile.js:17:9)
at next (/app/node_modules/tapable/lib/Tapable.js:204:14)
at Compiler.<anonymous> (/app/node_modules/webpack/lib/CachePlugin.js:78:5)
...
我尝试使用 node:carbon
图像构建并使用 ubuntu:16.04
+ 通过 apt
安装 node
,两个图像中的错误相同。
此错误是在构建的最后阶段引起的,我在该阶段使用 webpack 构建服务器应用程序 ($ node --max-old-space-size=4096 ./node_modules/.bin/webpack -p
)。
我使用 webpack 3.11,配置如下:
const path = require('path');
const nodeExternals = require('webpack-node-externals');
module.exports = {
entry: {
server: './src/server.ts',
},
resolve: {
extensions: ['.ts', '.js'],
alias: {
'main.server': path.join(__dirname, 'dist', 'server', 'main.bundle.js'),
},
},
target: 'node',
externals: [nodeExternals({
whitelist: [
/^@ng-bootstrap\/ng-bootstrap/,
/ngx-translate-messageformat-compiler/,
],
})],
output: {
path: path.join(__dirname, 'dist'),
filename: '[name].js',
},
module: {
rules: [
{ test: /\.ts$/, loader: 'ts-loader' },
],
},
};
自己找到了一个解决方案,在 webpack 配置中我启用了 ts-loader
的 transpileOnly
选项,这个错误神奇地消失了。在这种情况下,代码已经过类型检查,所以无论如何都不需要。
{ test: /\.ts$/, loader: 'ts-loader', options: { transpileOnly: true } },