2017-07-06 103 views
1

我上週開盤下面的問題,但沒人似乎知道了答案:的WebPack巴貝爾jsnext:主要和依賴transpiling

我真不明白有什麼webpack/babel-loader當前狀態在node_modules發生依賴關係,請問誰能澄清?我試圖堅持每一個開放的問題。

  1. webpack/babel-loader transpiling jsnext:main文件?
  2. 如果有,是webpack/babel-loader傳譯jsnext:main文件在node_modules即使node_modules在排除關鍵?

我的情況:

rules: [{ 
    test: /\.(js|mjs)$/i, 
    exclude: [/node_modules/], 
    use: [{ 
     loader: 'babel-loader', //settings specified in package.json 
    },{ 
     loader: 'eslint-loader', //settings specified in package.json 
    } 
}] 

在我的依賴package.json我想:

"main": "index.js", <= not working (not transpiled) 
"jsnext:main": "index.js", <= not working (not transpiled) 
"module": "index.js", <= not working (not transpiled) 

無論是工作不去除exclude: [/node_modules/],但這不能在任何媒介到大使用因爲無限的編譯時間。

但後來:爲什麼https://github.com/lodash/lodash/blob/es/package.json與我的https://github.com/damianobarbati/react-create-app/blob/master/package.json有什麼不同? lodash-es即使在node_modules(並排除),但我的react-create-app不是:幫助!

回答

1

當您從規則中排除node_modules時,babel-loader未在node_modules中轉儲任何內容。像jsnext:mainmodule這樣的字段與裝載者/規則無關。當一個軟件包被導入時,webpack根據resolve.mainFields決定應該使用哪個文件,然後它會檢查應該將哪些規則應用於該文件。通常這些文件已經被轉儲,除了它們包含ES模塊(參見Rollup - pkg.module)。

如果你想transpile具有modulejsnext:main領域的任何模塊,你可以使用從賈森米勒developit/transpile-esnext-modules.js這決定了模塊是否應包含或不(includeexclude也接受一個函數)的規則。

+0

那麼爲什麼lodash-es被轉移?只有ES6文件在那裏。即使沒有這個規則,webpack也在傳輸:| –

+0

它們已經被轉錄。 GitHub存儲庫中的內容不是發佈到npm的內容。查看發佈的源代碼[unpkg - lodash](https://unpkg.com/[email protected]/lodash.js)(或查看'./ node_modules/lodash/lodash.js')。大多數圖書館使用現代功能編寫源代碼,並在發佈之前構建必要的文件。一個很好的例子是Redux,它有一個簡單的[構建過程](https://github.com/reactjs/redux/blob/c1953b04cf48b2973aa8e2197d5b46ec36adbd59/package.json#L22-L26)。發佈的輸出目錄('es','lib','dist')甚至在它的'.gitignore'中。 –