1

我正在接近 Snowpack,以前使用过 Webpack + Babel 加载器。我错过了一些东西,我知道什么:某种requirepolyfill 或 transformation。我不知道require在浏览器中工作的 Webpack 的内部结构,但我无法使用 Snowpack 获得相同的结果。

在我的snowpack.config.json我正在加载 Babel 插件:

{
  "buildOptions": {
    "clean": true,
    "out": "dist"
  },
  "mount": {
    "src": "/"
  },
  "plugins": [
    "@snowpack/plugin-babel"
  ]
}

.babelrc正在使用@babel/preset-env

{
  "presets": [
    ["@babel/preset-env", {
      "corejs": 3,
      "useBuiltIns": "usage"
    }]
  ]
}

一个测试脚本被转换snowpack build成这样:

"use strict";

require("core-js/modules/es.array.concat");

require("core-js/modules/es.array.map");

// Import polyfill
document.addEventListener('DOMContentLoaded', function () {
  [1, 2, 3].concat([4, 5]).map(function (n) {
    return console.log(n);
  });
});

window.addEventListener('load', function () {});

(当然,问题require是没有定义)

4

1 回答 1

1

Babel 仍然将import语句转换require为您的配置。为了防止这种情况,请尝试以下配置:

{
  "presets": [
    ["@babel/preset-env", {
      "targets": {
        "esmodules": true
      },
      "modules": false
    }]
  ]
}

您可以使用其他设置对其进行扩展,但这应该是最小的工作设置。

正如我在评论中提到的,没有modules: false它仍然可以转换为语句,因此您必须根据文档require覆盖默认行为

于 2020-12-10T14:52:51.973 回答