Babpack转换运行时问题与Webpack 2

时间:2017-05-30 11:34:52

标签: javascript webpack ecmascript-6 babeljs

下午好,

这是我在webpack's github报道的同一个问题,但我怀疑我可能是那个做错事的人,因此在这里提出一个问题。

我尝试使用 Babel 配置 webpack 2 ,其中一个要求是转换内置插件,例如Symbol。< / p>

尽管现在工作正常,但当我尝试使用webpack和babel的转换运行时,我无法使用exports *

输入文件(src / index.js):

export * from './secondFile'

secondFile.js:

export let TESTSYMBOL = Symbol('test');

export let TESTSYMBOL2 = Symbol('test2');

webpack.config.js (仅复制相关部分):

module: {
    rules: [
        {
            test: /\.jsx?$/,
            // Skip any files outside of `src` directory
            include:path.resolve(__dirname, 'src'),
            use: {
                loader: 'babel-loader',
                options: {
                    presets: ["es2015", "stage-3"],
                    plugins: ['transform-runtime']
                }
            }
        }
    ]
}

脚本

"webpack -d --config config/webpack.config.js"

输出文件gist

异常

Uncaught ReferenceError: exports is not defined - at Object.defineProperty(exports, "__esModule", {

Dev Dependencies:

  • &#34; webpack&#34;:&#34; 2.6.1&#34;,
  • &#34; webpack-dev-server&#34;:&#34; 2.4.5&#34;,
  • &#34; webpack-notifier&#34;:&#34; 1.5.0&#34;
  • &#34; babel-cli&#34;:&#34; 6.24.1&#34;,
  • &#34; babel-loader&#34;:&#34; 7.0.0&#34;,
  • &#34; babel-plugin-transform-runtime&#34;:&#34; 6.23.0&#34;,
  • &#34; babel-preset-es2015&#34;:&#34; 6.24.1&#34;,
  • &#34; babel-preset-stage-3&#34;:&#34; 6.24.1&#34;

依赖关系:   - &#34; babel-runtime&#34;:&#34; 6.23.0&#34;

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

似乎问题出在include上。出于某种原因,我无法使用path.resolvepath.join。 webpack documentation就是这样的例子。

如果webconfig如下所示,它可以正常工作:

 module: {
    rules: [
        {
            test: /\.js$/,
            include: [
                /src/
            ],
            // or exclude: [/node_modules/],
            use: 
                {
                    loader: 'babel-loader',
                    options: {
                        plugins: ['transform-runtime'],
                        presets: ['es2015', 'stage-3']

                    }
                }

        }
    ]
}

无论哪种方式,现在exports not defined存在问题,可以通过在es2015预设中将模块设置为false来解决(感谢Github上的Vanuan提供的建议):

presets: [['es2015', { modules: false }], 'stage-3'],

答案 1 :(得分:0)

对于IE或旧版浏览器,我需要使用 es-shims - 将ECMAScript规范移植到旧版JS引擎的库。

如果将这些库添加为index.html上的第一个导入(或等效的),则下面的这些库可能会解决您的问题。例如:

<script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.5.7/es5-shim.min.js"></script>

查看您可能需要的每个lib的此链接: util.promisify