在 Nodejs 中运行带有"umd"模块系统的捆绑 web pack JS 库会抛出错误:未定义"self"



最近我一直在开发一个JavaScript库,现在我想在npm上发布它。然后我了解到我必须使用包捆绑器。所以我开始学习webpack,并遵循他们的指南创建一个库

在他们的指南中,他们建议使用umd模块类型来支持所有模块系统,所以我使用了"umd"。但是当我试图运行(通过导入)在Node.js中生成的bundle文件,它会抛出一个异常:"self未定义">!然后我打开捆绑的文件,发现有一个名为self的变量,但我不知道它的目的是什么。

长话短说,然后我尝试了commonjscommonjs2模块类型,并发布了一个测试包,并在react中进行了测试。节点和环境,效果很好。遗憾的是,它在浏览器中不起作用使用标签。现在我的问题是我应该使用什么模块类型?

这是我的webpack.config.js

const path = require("path");
module.exports = {
mode: "production",
entry: "./src/index.js",
output: {
path: path.resolve(__dirname, "dist"),
filename: "index.js",
library: {
type: "commonjs", // umd, commonjs2, ....
},
},
};

这是我的项目结构

|- /dist
|- /src
|- package.json
|- webpack.config.json

Webpack版本:

"webpack": "^5.53.0"
"webpack-cli": "^4.8.0"

提前感谢。我非常感谢你花时间在StackOverflow <3.

我在github的webpack问题中找到了答案。

我可以使用library.type: "umd",但我只需要在我的webpack配置中添加以下内容。

module.exports = {
output: {
globalObject: 'this' // This line was missing
}
}

最新更新