Служба проверки типа Vue CLI игнорирует ограничения памяти - PullRequest
3 голосов
/ 20 марта 2019

DevOps попросил ограничить сборку внешнего интерфейса до ~ 1 ГБ ОЗУ, чтобы наш экземпляр Jenkins не закрывался.Мы используем стандартный @vue/cli проект с TypeScript.Однако служба проверки типа TS игнорирует все попытки ограничить использование памяти, которая всегда составляет 2048 МБ.

Я пытался отключить ее и полагаться на 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 МБ.

Я не уверен, что это проблема, связанная с тем, как Vue CLI настраивает Webpack / TS.

Ответы [ 2 ]

4 голосов
/ 23 апреля 2019

Я столкнулся с той же проблемой (хотя в моем случае я хотел повысить предел памяти вместо того, чтобы уменьшать его). Мне удалось изменить конфигурацию ForkTsCheckerWebpackPlugin, настроив встроенный в Vue CLI webpack.config:

// 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

Чтобы увидеть конфигурацию Webpack по умолчанию, используемую Vue CLI, вы можете проверить ее, запустив vue inspect: https://cli.vuejs.org/guide/webpack.html#inspecting-the-project-s-webpack-config

2 голосов
/ 05 июня 2019

в vue.config.js

const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
const os=require('os');
module.exports = {
    //......,
    chainWebpack: config => {
        config
            .plugin('fork-ts-checker')
            .tap(args => {
                let totalmem=Math.floor(os.totalmem()/1024/1024); //get OS mem size
                let allowUseMem= totalmem>2500? 2048:1000;
                args[0].memoryLimit = allowUseMem;
                return args
            })
    },
   //......
}
...