让 Snowpack 与 Babel 一起工作,"require is not defined"。我是否缺少需要转换?

Making Snowpack work with Babel, "require is not defined". Am I missing a require transformation?

我正在接近Snowpack,之前使用的是Webpack + Babel loader。我遗漏了一些东西,我知道是什么:一些 类型的 require polyfill 或转换 。我不知道使 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

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

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

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

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