【问题标题】:webpack can convert js to es6?webpack可以把js转成es6吗?
【发布时间】:2019-03-24 00:46:49
【问题描述】:

我使用 webpack 来捆绑我的节点应用程序。

我在 webpack 从 const 转换为 var 的包中看到了结果。这意味着 webpack 将我的文件转换为 es5。

如何告诉 webpack 转换为 es6? (例如,保留 const 和/或使用 import 关键字)

app.js

import {test} from './some';

const x = 1;

console.log('test', test);
console.log('this should be const in the bundle, not var. ', x);

捆绑包是:

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _some__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./some */ "./some.js");

var x = 1;
console.log('test', _some__WEBPACK_IMPORTED_MODULE_0__["test"]);
console.log('this should be const in the bundle, not var. ', x);

/***/ }),

我的 webpack 配置:

const path = require('path');

module.exports = () => [
  {
    mode: 'development',
    entry: path.resolve(__dirname, './app.js'),
    output: {
      path: path.resolve(__dirname, './dist')
    },
    devtool: 'source-map',
    target: 'node',
    module: {
      rules: [
        {
          test: /\.m?js$/,
          exclude: /(node_modules|bower_components)/,
          use: {
            loader: 'babel-loader',
            options: {
              presets: ['@babel/preset-env']
            }
          }
        }
      ]
    }
  }
];

【问题讨论】:

    标签: javascript node.js webpack ecmascript-6 webpack-4


    【解决方案1】:

    您正在使用@babel/preset-env,没有任何选项。这会将代码转换为 ES5,并且文档说不建议以这种方式使用它。 “env”预设的全部意义在于您提供了一个目标平台,它将自动应用该平台所需的转换。传递“targets.node”-option 值 true 或“current”将转换当前使用的节点版本的代码。使用带有此选项的预设还有一个额外的优势,即升级 node.js 将不需要对 Babel 配置进行任何更改,并且如果新的 node.js 支持更多使用的 ES 功能,则转换的代码将更少。

    node.js 中对 ECMAScript 模块的支持仍处于试验阶段,但您可以通过将 false 传递给“modules”-option 来禁用模块转换。

    options: {
        presets: [[
            '@babel/preset-env',
            {
                targets: {
                    node: "current"
                },
                modules: false
            }
        ]]
    }
    

    【讨论】:

    • 是的,它适合 const 关键字。 import 呢?似乎没有变化.. 带有__webpack_require__ 功能的 webpack 捆绑包,而不是导入。
    • Webpack 是一个模块打包器。默认情况下,它会将您的所有 .js 文件捆绑为一个。如果您不想将它们捆绑在一起,那么您根本不应该使用 webpack。您提供的捆绑包不完整。 __webpack_require__() 函数也包含在包中。
    • @Pretseli 根本不应该使用 webpack 吗?代码拆分或摇树呢?
    • @evolutionxbox:我一般不反对使用 Webpack,但是代码拆分和摇树在 node.js(服务器)环境中带来的好处很少。这并不意味着你永远不应该使用 Webpack 来捆绑 node.js 代码。有一些特殊的用例,但这不是真正的重点。如果你不想捆绑(这似乎是这里想要的),那么使用 Webpack 就像用钻头敲钉子一样。
    • @Pretseli 服务器环境?!我没听懂。个人觉得为 node 编译是没有意义的。
    猜你喜欢
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2014-03-18
    • 2018-09-17
    • 2017-02-20
    • 2020-10-25
    • 1970-01-01
    相关资源
    最近更新 更多