Pakiet sieci Web nie wyklucza modułów node_modules

85

Używam pakietu webpack dla platformy Node, którą tworzę (chociaż powinienem prawdopodobnie użyć łyka). Kiedy dołączam moduł EJS, webpack umieszcza go w skompilowanym źródle, mimo że wyraźnie mówię mu, aby wykluczył katalog 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"] }'
            }
        ]
    }
};

Jak widać, mam test dla plików JS i mówię mu, aby wykluczył node_modules; dlaczego ignoruje moje wykluczenie?

ndugger
źródło

Odpowiedzi:

183

Z twojego pliku konfiguracyjnego wygląda na to, że wykluczasz tylko node_modulesmożliwość parsowania babel-loader, ale nie dołączania do pakietu.

Aby wykluczyć node_modulesi natywne biblioteki węzłów ze sprzedaży wiązanej, musisz:

  1. Dodaj target: 'node'do swojego webpack.config.js. Spowoduje to wykluczenie natywnych modułów węzłów (ścieżka, FS itp.) Z pakietu.
  2. Aby wykluczyć inne, użyj pakietu webpack-node-externalsnode_modules .

Wynikowy plik konfiguracyjny powinien więc wyglądać następująco:

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 
    ...
};
lyosef
źródło
7
Czy jest coś podobnego w przeglądarce? (tj. cel: „przeglądarka”)
Andrea.cabral
Próbuję zrozumieć, co exclude: /node_modules/robi. Czy mógłbyś to rozwinąć? Co by się stało, gdybyśmy to pominęli?
Šime Vidas,
To wyrażenie regularne. jeśli to pominiesz, zostaną uwzględnione
node_modules
Fantastyczna odpowiedź i możliwości.
Geek Stocks
2
@ ŠimeVidas wykluczy katalog node_modulesz babel-loaderprzejechania po nim, ale nie wykluczy go z pakietu
mlg87
16

Jeśli wpadł na ten problem przy korzystaniu maszynopis, może trzeba dodać skipLibCheck: truew tsconfig.jsonpliku.

mattnedrich
źródło
7

Spróbuj użyć ścieżki bezwzględnej:

exclude:path.resolve(__dirname, "node_modules")
Alan
źródło
czy możesz nam pokazać, jak zbudowany jest projekt? Struktura plików
Alan,
-1

wypróbuj poniższe rozwiązanie:

exclude:path.resolve(__dirname, "node_modules")
Sina Dorostkar
źródło
6
Witamy w StackOverflow. Byłoby lepiej, gdybyś oprócz innych odpowiedzi podał dodatkową wartość. W tym przypadku Twoja odpowiedź nie zapewnia dodatkowej wartości, ponieważ inny użytkownik (Alan) opublikował to rozwiązanie już 5 lat temu. Powinieneś zagłosować, gdy zdobędziesz wystarczającą reputację
Oleg Valter
-2

To zadziałało dla mnie:

exclude: [/ bower_components /, / node_modules /]

module.loaders

Szereg automatycznie stosowanych programów ładujących.

Każdy element może mieć następujące właściwości:

test: warunek, który musi zostać spełniony

wyklucz: warunek, którego nie można spełnić

include: warunek, który musi zostać spełniony

loader: ciąg znaków „!” oddzielne ładowarki

programy ładujące: tablica programów ładujących jako ciąg

Warunek może być wyrażeniem regularnym, bezwzględnym początkiem ścieżki lub tablicą jednego z nich połączonych z „i”.

Zobacz http://webpack.github.io/docs/configuration.html#module-loaders

freecks
źródło