我试图在詹金斯上构建我的项目。本地构建成功,但 Jenkins 构建失败。有什么解决办法吗? 我正在使用 primeng 模块来实现 p-organizationchart。我怀疑这可能是问题所在。
我使用的版本是:
`"primeicons": "^4.1.0",
"primeng": "^11.3.0",
"node" : 14.16.0`
我正在开发 Angular 8
这是一个 webpack 问题。作为解决方法,您可以向构建任务添加环境变量:
export NODE_OPTIONS=--openssl-legacy-provider
请参阅 webpack 项目中的 this 问题。
您可以将环境变量添加到 package.json 脚本部分
{
"scripts": {
"build": "export NODE_OPTIONS=--openssl-legacy-provider; ng build"
}
}
如果您使用的是 docker,您可以在构建之前将环境变量添加到 Docker 文件中
ENV NODE_OPTIONS=--openssl-legacy-provider
我对詹金斯不熟悉。如果您在那里使用类似 bash 的脚本来构建您的应用程序,您还可以将该行添加到该脚本中。
注意:在windows中使用set而不是export
我遇到了同样的错误,通过从 Node 17.2 降级到 16.10 解决了这个问题
您也可以在启动之前在控制台中运行它
ng serve
$ export NODE_OPTIONS=--openssl-legacy-provider
接受的答案和解决方法忽略了旧版 Node.js 版本 17 中的安全漏洞,该版本默认使用 OpenSSL 版本 3。由于此问题,我的组织需要升级到 Node.js 版本 18,因此降级我的版本或使用旧版 OpenSSL 对我来说不是一个选择。
从下面的堆栈跟踪中,您可以看到 MD4 哈希漏洞和错误,并且它发生在 Webpack 中。所以你会认为最新版本的 Webpack 可以解决问题。
Generating browser application bundles (phase: building)...node:internal/crypto/hash:71
this[kHandle] = new _Hash(algorithm, xofLen);
^
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:71:19)
at Object.createHash (node:crypto:133:10)
at module.exports (C:\workspace\ssdweb\src\main\angular\node_modules\webpack\lib\util\createHash.js:135:53)
at NormalModule._initBuildHash (C:\workspace\ssdweb\src\main\angular\node_modules\webpack\lib\NormalModule.js:417:16)
at handleParseError (C:\workspace\ssdweb\src\main\angular\node_modules\webpack\lib\NormalModule.js:471:10)
at C:\workspace\ssdweb\src\main\angular\node_modules\webpack\lib\NormalModule.js:503:5
at C:\workspace\ssdweb\src\main\angular\node_modules\webpack\lib\NormalModule.js:358:12
at C:\workspace\ssdweb\src\main\angular\node_modules\loader-runner\lib\LoaderRunner.js:373:3
at iterateNormalLoaders (C:\workspace\ssdweb\src\main\angular\node_modules\loader-runner\lib\LoaderRunner.js:214:10)
at iterateNormalLoaders (C:\workspace\ssdweb\src\main\angular\node_modules\loader-runner\lib\LoaderRunner.js:221:10)
at C:\workspace\ssdweb\src\main\angular\node_modules\loader-runner\lib\LoaderRunner.js:236:3
at context.callback (C:\workspace\ssdweb\src\main\angular\node_modules\loader-runner\lib\LoaderRunner.js:111:13)
at Object.loader (C:\workspace\ssdweb\src\main\angular\node_modules\css-loader\dist\index.js:183:3) {
opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
Node.js v18.16.0
我的节点版本是 20,但仍然存在此问题,然后我删除了 Angular CLI 并安装了最新版本,问题就解决了。
如何解决数字信封例程::角度不支持
程序步骤:
1.安装旧版本的node js。 示例 16,17。 我的建议是使用 Node js 16 版本
2.安装完node js后,在cmd命令node -v中检查版本。
3.检查版本后,使用 ng build --prod 命令构建您的项目
问题原因:
较旧的 Angular 版本不支持更新 Node js 版本
对我有用的解决方案是降级到节点版本 14。我尝试的其他一切都没有成功。
如果您使用的是 Windows,请在终端中运行以下命令,然后重建应用程序
设置 NODE_OPTIONS=--openssl-legacy-provider
对于 Mac 使用:
导出 NODE_OPTIONS=--openssl-legacy-provider
有关更多信息,请参阅如何在运行 Angular 应用程序时解决“不支持数字信封例程”或 ERR_OSSL_EVP_UNSUPPORTED 错误 .
写这篇文章时我遇到了同样的错误。我之前的节点版本是最新(18)。 我如何解决这个问题: