角度通用内置码头:无法读取属性' getOptionsDiagnostics'未定义的

时间:2018-04-20 14:09:17

标签: angular docker webpack angular-universal

我启用了通用渲染的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 +通过node安装apt进行构建,两张图片都出现相同的错误。

此错误是在构建的最后阶段引起的,我使用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' },
    ],
  },
};

1 个答案:

答案 0 :(得分:2)

我自己找到了一个解决方案,在webpack配置中启用了transpileOnly的{​​{1}}选项,这个错误神奇地消失了。在这种情况下,代码已经过类型检查,因此无论如何都不需要。

ts-loader