typescript - Vue CLI 的类型检查服务忽略内存限制

标签 typescript webpack vue-cli vue-cli-3

DevOps 要求我们将前端构建限制在 ~1GB RAM,这样我们的 Jenkins 实例就不会关闭。我们使用带有 TypeScript 的标准 @vue/cli 项目。但是,TS 类型检查服务会忽略所有限制其内存使用量的尝试,内存使用量始终为 2048 MB。

我试过禁用它并依赖 fork-ts-checker-webpack-plugin 但这会引入其他问题。

根据我的发现,这应该可行:

$ NODE_OPTIONS=--max_old_space_size=1024 \
    NODE_ENV=production \
    node \
    --max_old_space_size=1024 \
    --max-old-space-size=1024 \
    node_modules/.bin/vue-cli-service build

请注意,我不知道这些内存限制是如何工作的,因为我对 Node 的内部结构知之甚少。但尽管如此,类型检查服务始终以 2048 MB 的限制开始。

我不确定这是否是 Vue CLI 配置 Webpack/TS 的特定问题。

最佳答案

我遇到了同样的问题(尽管在我的例子中,我想提高内存限制而不是降低它)。我能够通过自定义 Vue CLI 的内置 webpack.config 来修改 ForkTsCheckerWebpackPlugin 的配置:

// in vue.config.js

const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');

module.exports = {
  configureWebpack: config => {

    // get a reference to the existing ForkTsCheckerWebpackPlugin
    const existingForkTsChecker = config.plugins.filter(
      p => p instanceof ForkTsCheckerWebpackPlugin,
    )[0];

    // remove the existing ForkTsCheckerWebpackPlugin
    // so that we can replace it with our modified version
    config.plugins = config.plugins.filter(
      p => !(p instanceof ForkTsCheckerWebpackPlugin),
    );

    // copy the options from the original ForkTsCheckerWebpackPlugin
    // instance and add the memoryLimit property
    const forkTsCheckerOptions = existingForkTsChecker.options;
    forkTsCheckerOptions.memoryLimit = 8192;

    config.plugins.push(new ForkTsCheckerWebpackPlugin(forkTsCheckerOptions));
  },
};

现在,当我运行我的构建时,我在我的输出中看到了这个:

-  Building for production...
Starting type checking service...
Using 1 worker with 8192MB memory limit

有关 configureWebpack 选项的更多信息,请点击此处:https://cli.vuejs.org/config/#configurewebpack

要查看 Vue CLI 使用的默认 Webpack 配置,您可以通过运行 vue inspect 来检查它: https://cli.vuejs.org/guide/webpack.html#inspecting-the-project-s-webpack-config

关于typescript - Vue CLI 的类型检查服务忽略内存限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55258355/

相关文章:

javascript - 如何导入依赖项的依赖项?

docker - 如何在Docker容器中运行grails-vue配置文件?

vue.js - 使用 vue 和 jest 内联测试 svg

vue.js - 构建 dist 文件夹并将其发布到 github 页面

angular - 如何从 Angular 4的文件上传输入中获取路径

angular - 更改路线而不更改 Angular 5 中的 url

typescript - 使用 express 完成测试运行后,Jest 没有退出一秒钟

angular - 如何在另一个内部使用服务?

javascript - 如何使用 webpack 从模块中要求或仅导入必要的导出

python - React - 具有动态 'output' 的 Django webpack 配置