1

我最近重构了我的应用程序以使用 webpack v2。运行 webpack -p 后,我注意到我的构建大小实际上增加了 ~32kb。我认为它没有实现摇树。因此,在我的 .babelrc 文件中,我更改了以下代码:

  "presets": [
    "react",
    "es2015",
    "stage-0",
  ]

==>

  "presets": [
    ["es2015", { "modules": false }],
    "react",
     "stage-0",
  ]

但现在我收到以下错误:

> webpack -p

C:\Users\jasan\Downloads\app\webpack.config.babel.js:1
(function (exports, require, module, __filename, __dirname) { import webpack fro
m 'webpack';
                                                              ^^^^^^
SyntaxError: Unexpected token import
    at Object.exports.runInThisContext (vm.js:76:16)
    at Module._compile (module.js:542:28)
    at loader (C:\Users\jasan\Downloads\app\node_modules\babel-register\lib\n
ode.js:144:5)
    at Object.require.extensions.(anonymous function) [as .js] (C:\Users\jasan\D
ownloads\app\node_modules\babel-register\lib\node.js:154:7)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at requireConfig (C:\Users\jasan\Downloads\app\node_modules\webpack\bin\c
onvert-argv.js:96:18)
4

2 回答 2

1

问题是当 webpack 看到 时webpack.config.babel.js,它会尝试使用.babelrc预设的 es2015 和"modules": false,这意味着它会保持import/export原样。但是 node.js 无法理解这样的语法,所以你必须为 node 提供 CommonJS 模块。

一种可能的解决方案是直接使用参数将配置从.babelrcwebpack-loader移动query

module: {
  loaders: [
    { test: /\.js$/, 
      exclude: /node_modules/, 
      loader: "babel-loader", 
      query: {
        "presets": [
          "react",
          ["es2015", { "modules": false }],
          "stage-0"
         ]
      }    
    }
  ]
}

.babelrc留下用于将导入转换为 CommonJS 的插件:

{
  "plugins": ["transform-es2015-modules-commonjs"]
}

不要忘记添加必要的插件package.json

"babel-plugin-transform-es2015-modules-commonjs": "^6.22.0"

有关详细信息,请同时检查此问题https://github.com/webpack/webpack/issues/1403

于 2017-02-13T07:19:55.947 回答
0

在 webpack.config.js 中

利用const webpack = require('webpack');

代替

import webpack from 'webpack';

于 2017-05-09T06:22:04.617 回答