让 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
我正在接近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