2015-10-07 14 views
52

Używam webpacka dla budowanego przeze mnie środowiska Node (choć prawdopodobnie powinienem używać łyka, wprawdzie). Po dołączeniu modułu EJS, pakiet internetowy włącza go do skompilowanego źródła, mimo że wyraźnie powiadamam go o wykluczeniu katalogu węzeł_modules.Webpack nie wyłączając 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ę, aby wykluczyć node_modules; dlaczego ignoruje moje wykluczenie?

Odpowiedz

109

z pliku konfiguracyjnego, wydaje się, że jesteś jedynym wyjątkiem node_modules przed analizowany z babel-loader, ale nie przed pakiecie.

W celu wykluczenia node_modules i rodzime biblioteki węzła z grupowania, trzeba:

  1. Dodaj target: 'node' do webpack.config.js. To będzie exclude native node modules (ścieżka, fs, itp.) Z pakietu.
  2. Użyj webpack-node-externals, aby wykluczyć inne node_modules.

więc plik konfiguracyjny wynik powinien 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 
    ... 
}; 
+1

Czy jest coś podobnego w przeglądarce? (tj. target: "przeglądarka") –

+0

Próbuję zrozumieć, co robi 'exclude:/node_modules /'. Czy mógłbyś rozwinąć? Co by się stało, gdybyśmy go opuścili? –

+0

To jest wyrażenie regularne.jeśli go opuścisz, node_modules zostanie dołączone. – meredrica

7

użycie Spróbuj ścieżka bezwzględna:

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

To też nie działa. – ndugger

+0

czy możesz pokazać, w jaki sposób projekt jest zorganizowany? Struktura pliku – Alan

+1

nie działa dla pakietu sieciowego 3.5.5 – vijay

-1

to się ze mną dzieje, bo nie podano własne resolve.extensions ale nie obejmują pusty rozszerzenie '':

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

Z webpack docs:

Ustawienie tej opcji zastąpi wartość domyślną, co oznacza, że ebpack nie będzie już próbował rozwiązywać modułów przy użyciu domyślnych rozszerzeń. Jeśli chcesz, aby moduły, które były wymagane z ich rozszerzeniem (na przykład require ("./ somefile.ext")), zostały poprawnie rozwiązane, musisz wprowadzić pusty łańcuch w tablicy. Podobnie, jeśli chcesz, aby moduły, które były wymagane bez rozszerzeń (na przykład wymagają ("podkreślenia")), zostały rozwiązane dla plików z rozszerzeniami ".js", musisz dołączyć ".js" do swojej tablicy.

Dodanie pusty rozszerzenie rozwiązany błędy:

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

Nie działa w pakiecie internetowym 2.2: "Niepoprawny obiekt konfiguracyjny. Pakiet Webpack został zainicjowany przy użyciu obiektu konfiguracyjnego, który nie pasuje do schematu interfejsu API. - configuration.resolve.extensions [0] nie powinien być pusty. – alwe

5

Jeśli wpadł na ten problem przy korzystaniu maszynopis, może trzeba dodać skipLibCheck: true w pliku tsconfig.json.

Powiązane problemy