谈firefox-send安装与new Error(“Cannot find module ‘webcrypto-core'”);错误

发布于 2022-02-25  1155 次阅读


前言

这两天打算给send增加新功能,但是部署却出了问题,build一直编译报错

SyntaxError: Unexpected token (3:25)
| !(function webpackMissingModule() { var e = new Error("Cannot find module 'webcrypto-core'"); e.code = 'MODULE_NOT_FOUND'; throw e; }());
|
| class LinerError extends !(function webpackMissingModule() { var e = new Error("Cannot find module 'webcrypto-core'"); e.code = 'MODULE_NOT_FOUND'; throw e; }()) {
|   constructor() {
|     super(...arguments);
    at Parser.pp$4.raise (C:\firefox-send\node_modules\webpack\node_modules\acorn\dist\acorn.js:2825:15)
    at Parser.pp.unexpected (C:\firefox-send\node_modules\webpack\node_modules\acorn\dist\acorn.js:689:10)
    at Parser.pp$3.parseExprAtom (C:\firefox-send\node_modules\webpack\node_modules\acorn\dist\acorn.js:2270:12)
    at Parser.pp$3.parseExprSubscripts (C:\firefox-send\node_modules\webpack\node_modules\acorn\dist\acorn.js:2089:21)
    at Parser.pp$1.parseClassSuper (C:\firefox-send\node_modules\webpack\node_modules\acorn\dist\acorn.js:1404:55)
    at Parser.pp$1.parseClass (C:\firefox-send\node_modules\webpack\node_modules\acorn\dist\acorn.js:1309:10)
    at Parser.pp$1.parseStatement (C:\firefox-send\node_modules\webpack\node_modules\acorn\dist\acorn.js:833:19)
    at Parser.pp$1.parseTopLevel (C:\firefox-send\node_modules\webpack\node_modules\acorn\dist\acorn.js:746:23)
    at Parser.parse (C:\firefox-send\node_modules\webpack\node_modules\acorn\dist\acorn.js:553:17)
    at Function.parse (C:\firefox-send\node_modules\webpack\node_modules\acorn\dist\acorn.js:576:37)
    at Function.parse (C:\firefox-send\node_modules\webpack\lib\Parser.js:2396:22)
    at ConcatenatedModule.source (C:\firefox-send\node_modules\webpack\lib\optimize\ConcatenatedModule.    at Function.renderExtractedChunk (C:\firefox-send\node_modules\extract-text-webpack-plugin\dist\index.js:115:38)
    at ExtractTextPlugin.<anonymous> (C:\firefox-send\node_modules\extract-text-webpack-plugin\dist\index.js:313:46)
    at Array.forEach (<anonymous>)
    at C:\firefox-send\node_modules\extract-text-webpack-plugin\dist\index.js:301:25
    at AsyncSeriesHook.eval [as callAsync] (eval at create (C:\firefox-send\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:7:1)
    at AsyncSeriesHook.lazyCompileHook (C:\firefox-send\node_modules\tapable\lib\Hook.js:154:20)
    at C:\firefox-send\node_modules\webpack\lib\Compilation.js:1377:32
    at eval (eval at create (C:\firefox-send\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:11:1)
    at C:\firefox-send\node_modules\extract-text-webpack-plugin\dist\index.js:296:11
    at C:\firefox-send\node_modules\async\dist\async.js:473:16
    at iteratorCallback (C:\firefox-send\node_modules\async\dist\async.js:1064:13)
    at C:\firefox-send\node_modules\async\dist\async.js:969:16
    at C:\firefox-send\node_modules\extract-text-webpack-plugin\dist\index.js:274:13
    at C:\firefox-send\node_modules\async\dist\async.js:473:16
    at iteratorCallback (C:\firefox-send\node_modules\async\dist\async.js:1064:13)
    at C:\firefox-send\node_modules\async\dist\async.js:969:16
    at C:\firefox-send\node_modules\extract-text-webpack-plugin\dist\index.js:261:26
    at callback (C:\firefox-send\node_modules\webpack\lib\Compilation.js:1196:5)
    at C:\firefox-send\node_modules\webpack\lib\Compilation.js:1219:5
    at processTicksAndRejections (node:internal/process/task_queues:78:11) {
  pos: 164,
  loc: Position { line: 3, column: 25 },
  raisedAt: 165
}


网上的说法是倾向root问题
比如send的一个issue还有腾讯云的某篇文章也是这么说的


因此我也在root权限这个坑里栽了许久,反复换各种权限不成功。
最后我发现,编译错误根本和权限毫无关系

踩坑

尝试安装报错中提到的webcrypto-core
安装后报错又变得更多了,各种报错 webcrypto-core 没有找到 xx function 的错误。
结合之前的别人提到的root问题,会不会是root的问题?
又尝试换了几个账户和权限,还是不行。
这时,issue中的一条评论提醒了我,

会不会是npm默认下载的 webcrypto-core 不对?

解决

这是npm的 webcrypto-core

项目的github维护库是
https://github.com/PeculiarVentures/webcrypto-core
明显和之前评论给出的github库的用户名对不上
那么我们用之前评论给出的内容,拼接出github链接

https://github.com/dannycoates/webcrypto-core
访问会跳转到 mozilla-fxa/webcrypto-core

可以看到 webcrypto-core 是我们之前npm 那个 webcrypto-core的 fork ,但是是18年的fork,这也难怪为什么我们之前npm build 会一直报错,其实是因为我们下载的是最新的 webcrypto-core 其中send使用的一些在老版本的 webcrypto-core 方法在新版本中已经被抛弃了,这也难怪会一直编译出问题。
只需要在package.json中增加一行

"webcrypto-core": "github:mozilla-fxa/webcrypto-core"

然后完全删除 node_modules 文件夹,再重新 npm installnpm run build ,之后就一路非常顺利了。

参考

[1] - Can't build on Debian with Node v.11.11.0 #1221
[2] - 使用腾讯云轻量部署FirefoxSend临时文件分享服务


代码萌新,热爱折腾,喜欢花草和养鱼