webpack babel jsnext:主要和依赖关系转换

时间:2017-07-06 09:25:04

标签: webpack babeljs babel es6-modules

我上周打开了以下问题,但似乎没有人知道答案:

我真的不明白webpack / babel-loadernode_modules中转换依赖关系的当前状态,有人可以澄清一下吗?我试图坚持到处开设的每一个问题。

  1. webpack / babel-loader是否正在转发jsnext:main文件?
  2. 如果是,即使webpack位于排除密钥中,babel-loader中的jsnext:main / node_modulesnode_modules文件是否正在转发?
  3. 我的情况:

    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.jsonhttps://github.com/damianobarbati/react-create-app/blob/master/package.json有什么不同? lodash-es即使在node_modules中也被编译(并被排除在外),但我的react-create-app不是:HELP!

1 个答案:

答案 0 :(得分:3)

当您从规则中排除babel-loader时,node_modules不会在node_modules中发送任何内容。 jsnext:mainmodule等字段与加载程序/规则无关。导入包时,webpack根据resolve.mainFields决定应该使用哪个文件,然后检查它应该应用于该文件的规则。通常这些文件已被转换,但它们包含ES模块(参见Rollup - pkg.module)。

如果您想要转换任何具有modulejsnext:main字段的模块,您可以使用Jason Miller developit/transpile-esnext-modules.js中的规则来确定是否应该包含该模块( includeexclude也接受一项功能。)