2016-09-05 2 views
1

ich webpack einen Server bauen bauen verwenden, sieht die Config wie:Wie definiert man die Präzedenz von Loadern im Webpack?

loaders: [ 
    { 
    test: /\.js$/, 
    exclude: [/node_modules/], 
    loader: "babel-loader", 
    query: { 
     presets: ["es2015", "react"], 
     plugins: ["transform-object-rest-spread"] 
    } 
    }, { 
    test: new RegExp(`/ 
     stardust 
     |redux-form 
     |axios 
     |shuffle 
    `), 
    loader: "null-loader" 
    } 
] 

Idee ist ziemlich einfach: Wenn etwas regexp in der zweiten Lader übereinstimmt, ist es nicht geladen werden soll. Es funktioniert gut, bis ich das geladen habe:

Es passt zu beiden Ladegeräten und in das Bündel geladen. Wie kann ich null-loader Vorrang vor dem babel machen?

+0

Nicht wirklich eine Antwort, aber was ist, wenn Sie den 'Null-Loader' zuerst? Sie können beim Import immer auch den Loader-Typ angeben. 'shuffle importieren von" babel-loader! shufflejs/dist/shuffle.min.js " – cgatian

+0

Ich habe das versucht. Es funktioniert nicht, leider – asiniy

Antwort

1

Sie können Pre-Loader verwenden, wie in webpack documentation beschrieben, im Grunde verwenden Sie Ihre Regex mit Null-Loader als Pre-Loader auf diese Weise wird es vor Ihren Loadern gelöst werden. Wenn also regex mit null übereinstimmt, wird loader verwendet und das Modul wird nicht geladen.

Hier ist der modifizierte Code:

preLoaders: [ 
    { 
     test: new RegExp(`/ 
      stardust 
      |redux-form 
      |axios 
      |shuffle 
     `), 
     loader: "null-loader" 
    } 
], 
loaders: [ 
    { 
     test: /\.js$/, 
     exclude: [/node_modules/], 
     loader: "babel-loader", 
     query: { 
      presets: ["es2015", "react"], 
      plugins: ["transform-object-rest-spread"] 
     } 
    } 
] 

Die einzige andere Lösung, die ich denken kann, ist auf reguläre Ausdrücke verlassen Dateien ausschließen dieses Wort enthalten. Ich bin kein Experte in Regex, aber ich werde versuchen, einen Ausdruck vorschlagen:

loaders: [ 
    { 
     test: /^(?!stardust|redux-form|axios|shuffle)([a-zA-Z]+)\.js$/, 
     exclude: [/node_modules/], 
     loader: "babel-loader", 
     query: { 
      presets: ["es2015", "react"], 
      plugins: ["transform-object-rest-spread"] 
     } 
    } 
] 
+0

Ich habe versucht, Preloader, sie funktioniert leider nicht – asiniy

+0

Die andere Alternative ist auf Test Regex verlassen, um diese Namen von Babel Loader aufgelöst werden auszuschließen. Ich habe meine Antwort mit dieser Lösung aktualisiert. –

+0

Interessante Idee! Das wird funktionieren, aber nicht so elegant – asiniy

Verwandte Themen