angular - docker 内的Angular Universal:无法读取未定义的属性 'getOptionsDiagnostics'

标签 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' },
    ],
  },
};

最佳答案

我自己找到了一个解决方案,在webpack配置中,我启用了transpileOnlyts-loader选项,该错误神奇地消失了。在这种情况下,代码已经过类型检查,因此实际上并不需要。

{ test: /\.ts$/, loader: 'ts-loader', options: { transpileOnly: true } },

关于angular - docker 内的Angular Universal:无法读取未定义的属性 'getOptionsDiagnostics',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49943574/

相关文章:

javascript - 自定义验证器不调用 Angular 2 中的每个按键

javascript - 更新 npm 后 node_modules 中的错误?

azure - 如何编辑将标志(--ipc=host)传递给azure管道中的docker run -d -p?

docker - 只能在运行容器的节点上访问Docker群

vue.js - 如何删除 Vue 中的硬编码图标?

javascript - 如何使用 ionic 2 禁用/启用按钮?

html - 如何更改垫错误( Angular Material )的颜色?

docker - Docker检查格式以检索特定网络的IP

node.js - 在 nodejs 的服务器端使用 webpack

javascript - ES6 语法错误 const