babel 7不会在node_modules

时间:2019-02-20 14:36:44

标签: javascript node.js ecmascript-6 babel

我在IE11 SCRIPT1002中出错:语法错误(类语法有问题)。 我的简单代码只有2行:

import { struct } from 'superstruct';
console.log('finished');

我不希望将babel7编译类转换为ES5代码

我尝试编写.babelrc文件:

 {
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "ie": "11"
        }
      }
    ]
  ]
}

https://babeljs.io/docs/en/babel-plugin-transform-classes尚未解决

更新:   我尝试使用@ babel / plugin-preset-es2015,该类在ES5代码中转换类,但是babel7中已弃用该软件包

请帮助我

1 个答案:

答案 0 :(得分:3)

为了在Babel 7中转换node_modules和子程序包,您需要使用babel.config.js文件而不是.babelrc文件。

请参见issue commentproject-wide configuration上的babel文档。具体地

  

Babel 7.x中的新增功能,Babel的概念是“根”目录,该目录默认为当前工作目录。对于项目范围的配置,Babel将在此根目录中自动搜索“ babel.config.js”。

     

...

     

由于项目范围的配置文件与配置文件的物理位置分开,因此它们对于必须广泛应用的配置非常理想,甚至允许插件和预设轻松应用于node_modules或符号链接包中的文件。传统上,在Babel 6.x中进行配置非常麻烦。

它的不足之处是.babelrc用于本地项目文件转换(不包括node_modules),而babel.config.js应该被认为是项目范围的,并且在以下情况下将应用于包依赖项捆绑({{1)}。有点混乱,但希望能有所帮助!

编辑

有关使用Webpack生成示例文件的完整项目配置的更多信息。请注意,如果您在此处使用node_modules而不是.babelrc,则将不起作用。运行babel.config.js会生成不使用该类的脚本webpack-cli关键字。

script.js
script.out.js
babel.config.js
import { struct } from 'superstruct';
console.log('finished');
webpack.config.js
module.exports = {
    "presets": [
        [
            "@babel/preset-env",
            {
                    "targets": {
                    "ie": "11"
                }
            }
        ]
    ]
};
包依赖
module.exports = {
    entry: './script.js',
    output: {
        path: __dirname,
        filename: 'script.out.js',
    },
    module: {
        rules: [ {
            test: /\.m?js$/,
            use: {
                loader: 'babel-loader'
            }
        } ]
    }
}