使用 ZEIT Now、Next.js 和 Gun.js 时如何修复部署错误 "OSSL_WEBCRYPTO_OR_TEXT_ENCODING_NOT_INSTALLED is not defined"?
How do I fix deployment error "OSSL_WEBCRYPTO_OR_TEXT_ENCODING_NOT_INSTALLED is not defined" when using ZEIT Now, Next.js, and Gun.js?
由于 Gun.js 引用错误 OSSL_WEBCRYPTO_OR_TEXT_ENCODING_NOT_INSTALLED is not defined
,我无法通过 ZEIT Now 部署 Next.js 应用程序。 运行 在我本地机器上的开发模式下没有错误。
就在部署日志中的错误之前是消息 "node-webcrypto-ossl and text-encoding may not be included by default, please add it to your package.json!" 这样做并没有修复错误,也没有按照 https://github.com/amark/gun#additional-cryptography-libraries 添加 @trust/webcrypto
(我正在使用SEA 用于用户身份验证)(编辑:从依赖项中删除 @trust/webcrypto
)。
来自 Now 部署日志的堆栈跟踪:
Compiled with warnings.
./node_modules/gun/gun.js
Critical dependency: the request of a dependency is an expression
./node_modules/gun/sea.js
Critical dependency: the request of a dependency is an expression
./node_modules/gun/gun.js
Critical dependency: the request of a dependency is an expression
./node_modules/gun/sea.js
Critical dependency: the request of a dependency is an expression
Hello wonderful person! :) Thanks for using GUN, feel free to ask for help on https://gitter.im/amark/gun and ask Whosebug questions tagged with 'gun'!
node-webcrypto-ossl and text-encoding may not be included by default, please add it to your package.json!
> Build error occurred
ReferenceError: OSSL_WEBCRYPTO_OR_TEXT_ENCODING_NOT_INSTALLED is not defined
at /tmp/173ebd33/.next/serverless/pages/index.js:13474:7
at /tmp/173ebd33/.next/serverless/pages/index.js:13301:7
at /tmp/173ebd33/.next/serverless/pages/index.js:13478:5
at Object.<anonymous> (/tmp/173ebd33/.next/serverless/pages/index.js:14596:2)
at Object.md/m (/tmp/173ebd33/.next/serverless/pages/index.js:14597:30)
at __webpack_require__ (/tmp/173ebd33/.next/serverless/pages/index.js:23:31)
at Object.1TCz (/tmp/173ebd33/.next/serverless/pages/index.js:865:11)
at __webpack_require__ (/tmp/173ebd33/.next/serverless/pages/index.js:23:31)
at Module.VVmT (/tmp/173ebd33/.next/serverless/pages/index.js:11281:12)
at __webpack_require__ (/tmp/173ebd33/.next/serverless/pages/index.js:23:31)
at /tmp/173ebd33/.next/serverless/pages/index.js:91:18
at Object.<anonymous> (/tmp/173ebd33/.next/serverless/pages/index.js:94:10)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
npm
ERR! code ELIFECYCLE
npm
ERR! errno 1
npm
ERR! maptivist@1.0.0 now-build: `next build`
npm ERR!
Exit status 1
npm ERR!
npm ERR! Failed at the maptivist@1.0.0 now-build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
package.json
依赖关系:
{
"dependencies": {
"directory-named-webpack-plugin": "^4.0.1",
"gun": "^0.2019.726",
"mapbox-gl": "^1.2.1",
"next": "^9.0.3",
"next-offline": "^4.0.3",
"node-webcrypto-ossl": "^1.0.48",
"react": "^16.9.0",
"react-dom": "^16.9.0",
"styled-components": "^4.3.2",
"text-encoding": "^0.7.0"
}
}
node-webcrypto-ossl
-相关内容 package-lock.json
:
...
"gun": {
"version": "0.2019.726",
"resolved": "https://registry.npmjs.org/gun/-/gun-0.2019.726.tgz",
"integrity": "sha512-LVSxhGwaemZbrirSk6fp2KXORLUyjs6bnssjSjl/OhwbfLv7fvMhNfaOZuorzYsehxqMKJvxyNdFq/mZNXpjHQ==",
"requires": {
"emailjs": "^2.2.0",
"node-webcrypto-ossl": "^1.0.47",
"text-encoding": "^0.7.0",
"ws": "~>7.1.0"
}
},
...
"node-webcrypto-ossl": {
"version": "1.0.48",
"resolved": "https://registry.npmjs.org/node-webcrypto-ossl/-/node-webcrypto-ossl-1.0.48.tgz",
"integrity": "sha512-MWUkQ/5wrs7lpAr+fhsLMfjdxKGd3dQFVqWbNMkyYyCMRW8E7ScailqtCZYDLTnJtU6B+91rXxCJNyZvbYaSOg==",
"requires": {
"mkdirp": "^0.5.1",
"nan": "^2.13.2",
"tslib": "^1.9.3",
"webcrypto-core": "^0.1.26"
}
},
...
node-webcrypto-ossl
在 node_modules
中可见。
请帮忙! :-)
@randy-morantes 你的 package.json
看起来是正确的。
能否分享一下:
- 错误的堆栈跟踪。
- 您调用 gun 的服务器代码导致了这个问题。
我是 peculiar\webcrypto 和 node-webcrypto-ossl 包的作者。根据枪源:
https://github.com/amark/gun/blob/e0d85f02b567a43d39cda0fe71522b84ff52a08b/sea/shim.js#L25
看起来他们还没有切换到 peculiar\webcrypto。尝试将 node-webcrypto-ossl
添加到您的 package.json.
Next.js("next": "9.0.4"
、"next-offline": "4.0.5"
)的最新版本修复了这个问题!
我昨晚遇到了这个问题,最后使用一些 monkey-patch 和 hack around 成功修复了它。诀窍是将 gun 和 sea 从 webpack 和 React 环境中取出,然后使用 window.gun[ 访问它=32=]。此外,当 gun 不在 webpack 中时,它似乎 运行ning 更快。
这是我在 Gatsbyjs 项目中的做法:
阅读此文档:https://www.gatsbyjs.org/docs/custom-html/
- 复制 ./cache/default-html.js 到 ./src/html.js
- 现在html.js开始枪战。您可以从 github 或 jsdelivr 此处加载外部 js 文件。
然后在你的 gatsby 反应组件中,只需调用 window.gun 和 window.user 并享受黑客攻击:
if (window) 枪...
现在运行gatsby build你可以看到构建没有错误。
由于 Gun.js 引用错误 OSSL_WEBCRYPTO_OR_TEXT_ENCODING_NOT_INSTALLED is not defined
,我无法通过 ZEIT Now 部署 Next.js 应用程序。 运行 在我本地机器上的开发模式下没有错误。
就在部署日志中的错误之前是消息 "node-webcrypto-ossl and text-encoding may not be included by default, please add it to your package.json!" 这样做并没有修复错误,也没有按照 https://github.com/amark/gun#additional-cryptography-libraries 添加 @trust/webcrypto
(我正在使用SEA 用于用户身份验证)(编辑:从依赖项中删除 @trust/webcrypto
)。
来自 Now 部署日志的堆栈跟踪:
Compiled with warnings.
./node_modules/gun/gun.js
Critical dependency: the request of a dependency is an expression
./node_modules/gun/sea.js
Critical dependency: the request of a dependency is an expression
./node_modules/gun/gun.js
Critical dependency: the request of a dependency is an expression
./node_modules/gun/sea.js
Critical dependency: the request of a dependency is an expression
Hello wonderful person! :) Thanks for using GUN, feel free to ask for help on https://gitter.im/amark/gun and ask Whosebug questions tagged with 'gun'!
node-webcrypto-ossl and text-encoding may not be included by default, please add it to your package.json!
> Build error occurred
ReferenceError: OSSL_WEBCRYPTO_OR_TEXT_ENCODING_NOT_INSTALLED is not defined
at /tmp/173ebd33/.next/serverless/pages/index.js:13474:7
at /tmp/173ebd33/.next/serverless/pages/index.js:13301:7
at /tmp/173ebd33/.next/serverless/pages/index.js:13478:5
at Object.<anonymous> (/tmp/173ebd33/.next/serverless/pages/index.js:14596:2)
at Object.md/m (/tmp/173ebd33/.next/serverless/pages/index.js:14597:30)
at __webpack_require__ (/tmp/173ebd33/.next/serverless/pages/index.js:23:31)
at Object.1TCz (/tmp/173ebd33/.next/serverless/pages/index.js:865:11)
at __webpack_require__ (/tmp/173ebd33/.next/serverless/pages/index.js:23:31)
at Module.VVmT (/tmp/173ebd33/.next/serverless/pages/index.js:11281:12)
at __webpack_require__ (/tmp/173ebd33/.next/serverless/pages/index.js:23:31)
at /tmp/173ebd33/.next/serverless/pages/index.js:91:18
at Object.<anonymous> (/tmp/173ebd33/.next/serverless/pages/index.js:94:10)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
npm
ERR! code ELIFECYCLE
npm
ERR! errno 1
npm
ERR! maptivist@1.0.0 now-build: `next build`
npm ERR!
Exit status 1
npm ERR!
npm ERR! Failed at the maptivist@1.0.0 now-build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
package.json
依赖关系:
{
"dependencies": {
"directory-named-webpack-plugin": "^4.0.1",
"gun": "^0.2019.726",
"mapbox-gl": "^1.2.1",
"next": "^9.0.3",
"next-offline": "^4.0.3",
"node-webcrypto-ossl": "^1.0.48",
"react": "^16.9.0",
"react-dom": "^16.9.0",
"styled-components": "^4.3.2",
"text-encoding": "^0.7.0"
}
}
node-webcrypto-ossl
-相关内容 package-lock.json
:
...
"gun": {
"version": "0.2019.726",
"resolved": "https://registry.npmjs.org/gun/-/gun-0.2019.726.tgz",
"integrity": "sha512-LVSxhGwaemZbrirSk6fp2KXORLUyjs6bnssjSjl/OhwbfLv7fvMhNfaOZuorzYsehxqMKJvxyNdFq/mZNXpjHQ==",
"requires": {
"emailjs": "^2.2.0",
"node-webcrypto-ossl": "^1.0.47",
"text-encoding": "^0.7.0",
"ws": "~>7.1.0"
}
},
...
"node-webcrypto-ossl": {
"version": "1.0.48",
"resolved": "https://registry.npmjs.org/node-webcrypto-ossl/-/node-webcrypto-ossl-1.0.48.tgz",
"integrity": "sha512-MWUkQ/5wrs7lpAr+fhsLMfjdxKGd3dQFVqWbNMkyYyCMRW8E7ScailqtCZYDLTnJtU6B+91rXxCJNyZvbYaSOg==",
"requires": {
"mkdirp": "^0.5.1",
"nan": "^2.13.2",
"tslib": "^1.9.3",
"webcrypto-core": "^0.1.26"
}
},
...
node-webcrypto-ossl
在 node_modules
中可见。
请帮忙! :-)
@randy-morantes 你的 package.json
看起来是正确的。
能否分享一下:
- 错误的堆栈跟踪。
- 您调用 gun 的服务器代码导致了这个问题。
我是 peculiar\webcrypto 和 node-webcrypto-ossl 包的作者。根据枪源:
https://github.com/amark/gun/blob/e0d85f02b567a43d39cda0fe71522b84ff52a08b/sea/shim.js#L25
看起来他们还没有切换到 peculiar\webcrypto。尝试将 node-webcrypto-ossl
添加到您的 package.json.
Next.js("next": "9.0.4"
、"next-offline": "4.0.5"
)的最新版本修复了这个问题!
我昨晚遇到了这个问题,最后使用一些 monkey-patch 和 hack around 成功修复了它。诀窍是将 gun 和 sea 从 webpack 和 React 环境中取出,然后使用 window.gun[ 访问它=32=]。此外,当 gun 不在 webpack 中时,它似乎 运行ning 更快。
这是我在 Gatsbyjs 项目中的做法:
阅读此文档:https://www.gatsbyjs.org/docs/custom-html/
- 复制 ./cache/default-html.js 到 ./src/html.js
- 现在html.js开始枪战。您可以从 github 或 jsdelivr 此处加载外部 js 文件。
然后在你的 gatsby 反应组件中,只需调用 window.gun 和 window.user 并享受黑客攻击:
if (window) 枪...
现在运行gatsby build你可以看到构建没有错误。