Webpack не исключая модули узлов



Я использую webpack для структуры узла, которую я создаю (хотя я, вероятно, должен использовать gulp, по общему признанию). Когда я включаю модуль EJS, webpack включает его в скомпилированный источник, хотя я явно говорю ему исключить node_modules dir.



module.exports = {
context: __dirname,
target: 'node',
// ...
output: {
libraryTarget: 'commonjs'
// ...
},
module: {
loaders: [
{
test: /.js$/,
exclude: /node_modules/,
loader: 'babel-loader?{ "stage": 0, "optional": ["runtime"] }'
}
]
}
};


Как вы можете видеть, у меня есть тест для JS-файлов, и я говорю ему исключить node_modules; почему он игнорирует мое исключение?

579   4  

4 ответов:

из вашего конфигурационного файла, похоже, вы только исключаете node_modules от разбора с babel-loader,а не из комплекта поставки.

для того, чтобы исключить node_modules и собственные библиотеки узлов из пакета, вам нужно:

  1. добавить target: 'node' на webpack.config.js. Это будет исключить модули собственного узла (путь, fs и др.) могут быть в комплекте.
  2. использовать webpack-node-externals для того, чтобы исключить другие node_modules.

так что ваш результат конфигурационный файл должен выглядеть так:

var nodeExternals = require('webpack-node-externals');
...
module.exports = {
    ...
    target: 'node', // in order to ignore built-in modules like path, fs, etc. 
    externals: [nodeExternals()], // in order to ignore all modules in node_modules folder 
    ...
};

Если вы столкнулись с этой проблемой при использовании TypeScript, вам может потребоваться добавить skipLibCheck: true в своем .

попробуйте использовать абсолютный путь:

exclude:path.resolve(__dirname, "node_modules")

Это случилось со мной, потому что я указал свой собственный resolve.extensions но не удалось включить пустое расширение '':

resolve: {
  extensions: ['.js', '.jsx']
},

С webpack docs:

установка этого параметра переопределит значение по умолчанию, что означает, что webpack больше не будет пытаться разрешить модули с использованием расширений по умолчанию. Если вы хотите, модули которые были необходимы с их расширением (например, требуют('./ какой-то файл.ext')) чтобы правильно решить, вы должны включить пустая строка в массиве. Аналогично, если вы хотите, чтобы модули, которые были необходимы без расширений (например, require ('underscore')), были разрешены в файлы с ".АО" расширения, вы должны включить ".АО" в вашем массиве.

добавление пустого расширения разрешило ошибки:

resolve: {
  extensions: ['', '.js', '.jsx']
},

Comments

    Ничего не найдено.