Webpack, не виключаючи node_modules


83

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

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; чому це ігнорує моє виключення?

Відповіді:


180

З вашого конфігураційного файлу здається, що ви лише виключаєте 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 
    ...
};

7
Чи є щось подібне у браузері? (тобто ціль: 'браузер')
Andrea.cabral

Я намагаюся зрозуміти, що exclude: /node_modules/робить. Не могли б ви детальніше сказати? Що може статися, якби ми залишили це поза увагою?
Šime Vidas

Це регулярний вираз. якщо це залишити, node_modules будуть включені
meredrica

Фантастична відповідь та можливості.
Geek Stocks

2
@ ŠimeVidas це виключить node_modulesреж від того , в babel-loaderперспективі над ним, але це не виключає його з пакета
mlg87

16

Якщо ви зіткнулися з цим питанням при використанні машинопис, ви можете додати skipLibCheck: trueв ваш tsconfig.jsonфайл.


7

Спробуйте використати абсолютний шлях:

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

Ви можете показати нам, як структурований проект? Структура файлів
Алан,

-1

спробуйте це рішення нижче:

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

4
Ласкаво просимо до StackOverflow. Було б краще, якби ви надали додаткове значення поверх інших відповідей. У цьому випадку ваша відповідь не надає додаткової цінності, оскільки інший користувач (Алан) уже опублікував це рішення 5 років тому. Ви повинні проголосувати за це, коли у вас буде достатньо репутації
Олег Вальтер,

-2

Це працювало для мене:

виключити: [/ bower_components /, / node_modules /]

module.loaders

Масив навантажувачів, що застосовуються автоматично.

Кожен предмет може мати такі властивості:

тест: умова, яка повинна бути виконана

виключити: умова, яка не повинна бути виконана

включають: Умову, яка повинна бути виконана

loader: рядок "!" роздільні навантажувачі

навантажувачі: масив навантажувачів у вигляді рядка

Умовою може бути RegExp, абсолютний початок шляху або масив одного з них у поєднанні з "і".

Див. Http://webpack.github.io/docs/configuration.html#module-loaders

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.