2 minutes reading time
今天在编译构建一个 node.js 项目时,在构建过程中遇到了一些问题,本文将记录问题及对应的解决方案。
在执行 npm run build
遇到此提示:
error Expected linebreaks to be 'LF' but found 'CRLF' linebreak-style
根据信息可以看出是 eslint 的报错,查看 .eslintrc.js 文件,修改linebreak-style对应的行:
'linebreak-style': ['error', process.platform === 'win32' ? 'windows' : 'unix'],
重新运行命令,顺利构建成功。
这个问题的原因是项目的作者可能是使用 Linux 或 Mac 构建的,没有考虑 Windows 的情况,通过这行配置,可以根据运行的环境来决定 lint 规则。
在执行 npm start
遇到了第二个问题:
Generating browser application bundles (phase: building)...node:internal/crypto/hash:79
this[kHandle] = new _Hash(algorithm, xofLen, algorithmId, getHashCache());
^
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:79:19)
at Object.createHash (node:crypto:139:10)
at BulkUpdateDecorator.hashFactory (D:\code\xx\node_modules\webpack\lib\util\createHash.js:145:18)
at BulkUpdateDecorator.update (D:\code\xx\node_modules\webpack\lib\util\createHash.js:46:50)
at RawSource.updateHash (D:\code\xx\node_modules\webpack\node_modules\webpack-sources\lib\RawSource.js:77:8)
at NormalModule._initBuildHash (D:\code\xx\node_modules\webpack\lib\NormalModule.js:880:17)
at handleParseResult (D:\code\xx\node_modules\webpack\lib\NormalModule.js:946:10)
at D:\code\xx\node_modules\webpack\lib\NormalModule.js:1040:4
at processResult (D:\code\xx\node_modules\webpack\lib\NormalModule.js:755:11)
at D:\code\xx\node_modules\webpack\lib\NormalModule.js:819:5 {
opensslErrorStack: [
'error:03000086:digital envelope routines::initialization error',
'error:0308010C:digital envelope routines::unsupported'
],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
根据这个报错,推测可能是啥 hash 算法不支持,通过查阅相关资料,得到以下解决方案:
1 降级 Node.js 版本,降级版本至 V16 版本以使用不安全的 libssl版本。显然这不是特别好的方法。
2 通过环境变量,让程序使用旧的OpenSSL提供程序
export NODE_OPTIONS=--openssl-legacy-provider
Windows
set NODE_OPTIONS=--openssl-legacy-provider
3 升级依赖
最佳作法是通过升级所使用的依赖。
https://stackoverflow.com/questions/37826449/expected-linebreaks-to-be-lf-but-found-crlf-linebreak-style
https://stackoverflow.com/questions/69692842/error-message-error0308010cdigital-envelope-routinesunsupported