Babel 6转换运行时:$ export不是函数

时间:2016-03-30 15:53:09

标签: javascript webpack babeljs

我试图加入Babel的转换运行时来使我的代码与IE9兼容。但是自从集成它以来,代码甚至不能在Chrome上运行。我在Uncaught TypeError: $export is not a function上收到错误es6.object.define-property.js:3。没有" transform-runtime"在我的.babelrc中,一切都运行良好。有什么想法吗?

这是我的.babelrc

{
  "plugins": [
    "transform-runtime"
  ],
  "presets": [
    "es2015",
    "react"
  ]
}

我的webpack.config.js

var webpack = require('webpack');

var commonsPlugin = new webpack.optimize.CommonsChunkPlugin('common.js');

module.exports = {
  entry: {
    EventAdmin: './src/event_admin',
    EventRender: './src/event_render'
  },
  output: {
    path: '../public/js2',
    filename: '[name].js' // Template based on keys in entry above
  },
  externals: {
    // require("jquery") is external and available
    //  on the global var jQuery
    'jquery': 'jQuery'
  },
  plugins: [commonsPlugin],
  devtool: 'source-map',
  module: {
    loaders: [
      { test: /\.css$/, loader: 'style-loader!css-loader' },
      {
        test: /\.js$/,
        loader: 'babel-loader'
      },
    ]
  }
};

enter image description here

7 个答案:

答案 0 :(得分:46)

尝试在exclude: /node_modules/之后添加loader: 'babel-loader'。尝试在不排除 node_modules 的情况下运行运行时转换器时遇到了同样的问题。不过,我不知道潜在的问题。

答案 1 :(得分:22)

您好我有同样的问题,最后找到了适合我的解决方案。见:

loaders: [
  {
    test: /.js/,
    loader: 'babel',
    query: {
      presets: ['es2015', 'es2017'],
      plugins: [
        ['transform-runtime', {
          helpers: false,
          polyfill: false,
          regenerator: true, }],
        'transform-es2015-destructuring',
        'transform-object-rest-spread',
        'transform-async-to-generator',
        ],
     },
  },
]

请参阅'transform-runtime'部分。我希望这会有所帮助。

答案 2 :(得分:7)

根据documentation的推荐,您可以尝试将“exclude”替换为“include”。

  

尽可能尝试选择“包含”......

这对我有用。

{
  "test": /\.js/,
  "loader": "babel",
  "include": [path.resolve(__dirname, './src')]
}

答案 3 :(得分:3)

首先,您必须安装babel-plugin-transform-runtime,然后像我一样使用它:

{
  "presets": [
    "es2015",
    "react",
    "stage-0"
  ],
  "plugins": [
    "transform-runtime"
  ]
}

之后,您必须将exclude密钥添加到babel-loader内部webpack配置文件中:

{
    test: /\.(js|jsx)$/,
    exclude: /node_modules/,
    use: [
        {
            loader: 'babel-loader',
        }
    ]
}

注意:请写/node_modules/而不是/(node_modules\/)//node_modules\//,这很奇怪,但这种方式有效。

答案 4 :(得分:2)

通过Babel 6运行core-js文件似乎存在问题,因为Babel 6不再像Babel 5那样将require('something')转换为require('something').default。我甚至尝试通过这个插件https://www.npmjs.com/package/babel-plugin-add-module-exports运行它,但不管我做了什么,都不能正确地纠正require语句。我最终只需通过将core-js属性设置为babel-loader来排除exclude和各种与Babel相关的文件被 [ /node_modules\/babel-/m, /node_modules\/core-js\//m, /node_modules\/regenerator-runtime\//m ] 处理:

node_modules

作为旁注,自从转换为Babel 6以来,我没有重新安装我的@Test fun `just testing`() { var showedChatAssigner = false var showChatComposer = false var didHideChat = false determineBottomBarView(null,{ showedChatAssigner = true }, { showChatComposer = true }, { didHideChat = true }) assertThat(showedChatAssigner, equalTo(true)) assertThat(showChatComposer, equalTo(false)) assertThat(didHideChat, equalTo(false)) } ,这导致了同样的问题,但出于其他一些神秘的原因。

答案 5 :(得分:2)

对于那些使用webpack的人,请确保不要在webpack配置文件中包含以下node_modules文件夹:

module: {
  rules: [
    {
      test: /\.js$/,
      // With this line, make sure you only include your javascript
      // source files
      include: [ path.resolve(__dirname, './src') ],
      use: {
        loader: 'babel-loader',
        options: {
          presets: ['env'],
          plugins: ['transform-runtime']
        }
      }
    }
  ]
}

答案 6 :(得分:1)

你有install还有babel-runtime吗?

我刚刚安装了两个并在.babelrc中添加了插件,结果很好。