WebPack может конвертировать JS в ES6? - PullRequest
0 голосов
/ 19 октября 2018

Я использую 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);

/***/ }),

мой конфиг веб-пакета:

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']
            }
          }
        }
      ]
    }
  }
];

1 Ответ

0 голосов
/ 19 октября 2018

Вы используете @ babel / preset-env без каких-либо опций.Это преобразует код в ES5, и в документации говорится, что не рекомендуется использовать его таким образом.Смысл предустановки env в том, что вы указываете целевую платформу, и она автоматически применяет преобразования, необходимые для этой платформы.Передача значения «target.node» -option true или «current» преобразует код для текущей используемой версии узла.Использование предустановки с этой опцией имеет дополнительное преимущество, заключающееся в том, что при обновлении node.js не потребуются какие-либо изменения в конфигурации Babel, и будет преобразовано меньше кода, если новый node.js поддерживает больше используемых функций ES.

Поддержка модулей ECMAScript в node.js все еще экспериментальная, но вы можете отключить преобразование модулей, передав false в опцию «modules».

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