我正在尝试将 node-jsencrypt 与 NextJS (tsx) 一起使用:
index.tsx
import JSEncrypt from 'node-jsencrypt';
package.json
"node-jsencrypt": "^1.0.0"
日志
<块引用>错误 - ./node_modules/node-jsencrypt/index.js:2:0
未找到模块:无法解析“fs”
注意事项:
我没有找到 'webpack.config.js'
文件,正如我在某些主题中看到的那样。
答案 0 :(得分:0)
好的,我解决了这个问题,我想我已经涵盖了所有可能的组合。在 repo 中,您可以找到工作示例。有 3 种可能的方法,正确的方法取决于您的项目中已有的内容 - 原始问题中未指定的详细信息。
next.config.js
module.exports = {
future: {
webpack5: true, // by default, if you customize webpack config, they switch back to version 4.
// Looks like backward compatibility approach.
},
webpack(config) {
config.resolve.fallback = {
...config.resolve.fallback, // if you miss it, all the other options in fallback, specified
// by next.js will be dropped. Doesn't make much sense, but how it is
fs: false, // the solution
};
return config;
},
};
next.config.js
module.exports = {
webpack(config) { // we depend on nextjs switching to webpack 4 by default. Probably they will
// change this behavior at some future major version.
config.node = {
fs: "empty", // webpack4 era solution
};
return config;
},
};
node-jsencrypt readme
它们是 jsencrypt 的节点端口,在这里我假设您尝试为浏览器构建。节点库卡在第 1 版,而原始库已经是第 3 版。当我检查 the last commit on main 时,如果您使用这个库,它构建得很好,没有任何问题。原始,nextjs 不知道答案:
从版本 5 开始,webpack 不再包含节点库的 polyfile。在您的情况下,您很可能需要将 resolve.fallback.fs: false
添加到您的 webpack 配置中。
有关此选项的更多信息 - https://webpack.js.org/configuration/resolve/#resolvefallback 它在 v4 到 v6 迁移指南中提到,如果这是你的情况: https://webpack.js.org/migrate/5/
答案 1 :(得分:0)
在 next.config.js 文件中添加以下代码
build: {
extend(config, {}) {
config.node = {
fs: 'empty'
}
}
},