NoneVue .config.js & webpack 4: переопределить "исключить" или "включить" правила

Я хочу переопределить исключение / включение правила веб-пакета. Проект был создан с vue-cli-sevice и, следовательно, имеет только vue.config.js, Я могу подключиться к конфигурации с chainWebpack, но я не могу редактировать само правило.

Выход из vue-cli-service inspect содержит правило, которое я хочу отредактировать:

      /* config.module.rule('js') */
      {
        test: /\.jsx?$/,
        exclude: [
          function () { /* omitted long function */ }
        ],
        use: [
          {
            loader: 'cache-loader',
            options: {
              cacheDirectory: '/Users/m/projects/echo/.../.cache/babel-loader',
              cacheIdentifier: '4b5cee3d'
            }
          },
          {
            loader: 'babel-loader'
          }
        ]
      },

Теперь я хочу изменить эту конфигурацию из моего vue.config.js (закомментированная часть показывает, как я нашел это в документации, но она не работает):

const chainWebpack = (config) => {
    config.module.rule('js');
        // .include
        // .add('node-modules/blubb')
        // .end();
};

module.exports = {
    chainWebpack
};

Как я могу добавить include или переопределить exclude свойство конфигурации этого правила?

3 ответа

Решение

Я получил это работает так Это очищает все исключение и добавляет включение.

const chainWebpack = (config) => {
    config.module
        .rule('js')
        .test(/\.jsx?$/)
            .exclude
                .clear()
            .end()
            .include
                .add(function() {
                    return [
                        'node_modules/include-me',
                        'src'
                    ]
                })
            .end()
};

Самый простой способ проверить, все ли работает должным образом - запустить IMO vue-cli-service inspect, Измените конфигурацию, проверьте, не удалось ли проверить, и, если нет, проверьте, содержат ли выходные данные требуемые изменения.

       /* config.module.rule('js') */
  {
    test: /\.m?jsx?$/,
    exclude: [
      filepath => {
                  // always transpile js in vue files
                  if (/\.vue\.jsx?$/.test(filepath)) {
                    return false
                  }
                  // exclude dynamic entries from cli-service
                  if (filepath.startsWith(cliServicePath)) {
                    return true
                  }
      
                  // only include @babel/runtime when the @vue/babel-preset-app preset is used
                  if (
                    process.env.VUE_CLI_TRANSPILE_BABEL_RUNTIME &&
                    filepath.includes(path.join('@babel', 'runtime'))
                  ) {
                    return false
                  }
      
                  // check if this is something the user explicitly wants to transpile
                  if (transpileDepRegex && transpileDepRegex.test(filepath)) {
                    return false
                  }
                  // Don't transpile node_modules
                  return /node_modules/.test(filepath)
                }
    ],
    use: [
      {
        loader: '/Users/penglz/codeLab/mantis/node_modules/cache-loader/dist/cjs.js',
        options: {
          cacheDirectory: '/Users/penglz/codeLab/mantis/node_modules/.cache/babel-loader',
          cacheIdentifier: '12a9bd26'
        }
      },
      {
        loader: '/Users/penglz/codeLab/mantis/node_modules/thread-loader/dist/cjs.js'
      },
      {
        loader: '/Users/penglz/codeLab/mantis/node_modules/babel-loader/lib/index.js'
      }
    ]
  },

это полный обзор конфигурации vue-cli, и я не могу понять, что произойдет после очистки необработанной конфигурации (код выше, exclude: [filpath => {// некоторая логика}]), поэтому я не менял это (как и другой ответ).

чтобы перенести какой-то pkg, я создаю новое правило в моем vue.config.js, оно работает с необработанной конфигурацией

      config.module
  .rule('resolveNodeModules')
  .test(/\.m?jsx?$/)
  .include.add(/node_modules\/(vue2-editor|quill|quill-delta)\/.*/)
  .end()
  .use('babel-loader')
  .loader('babel-loader')

в моей конфигурации я хочу передать vue2-editor / quill / quill-delta, он работает и не должен влиять на исходную конфигурацию

Вы должны использовать «конец» послеexclude.add().

Другие вопросы по тегам