Ubuntu 16.04下turndown包构造函数NodeJS错误排查求助
我来帮你拆解一下这个跨发行版的问题,大概率是这几个点在搞鬼:
Node.js版本差异:虽说你提到Ubuntu上装了最新版Node.js,但Ubuntu 16.04默认软件源里的Node版本相当老旧(大概是v4.x或v6.x),哪怕是通过第三方源安装的最新版,也得确认下和Fedora 27上的Node版本是否完全一致。Turndown里的部分语言特性(比如新JS语法、特定API)可能在旧版Node里不被支持,而Fedora 27默认的Node版本大概率更贴近Turndown要求的版本(比如v8+及以上)。你可以在两个系统里分别运行
node -v和npm -v来对比版本号。系统依赖库差异:Turndown底层可能依赖了一些系统级的库,比如和字符编码、语言处理相关的组件。Ubuntu 16.04的系统库版本偏旧,而Fedora 27的库更新,刚好能满足Turndown的隐性依赖。比如和国际化(i18n)相关的libicu库,两个发行版的版本差异就可能导致Turndown的语言构造函数出错。
npm包依赖的安装差异:不同系统上npm安装包时,会根据系统架构、Node版本编译不同的二进制依赖(如果有的话)。Ubuntu 16.04作为较老的发行版,部分依赖包的编译过程可能出现兼容问题,进而导致Turndown运行时出错。你可以试试删除Ubuntu上的
node_modules文件夹和package-lock.json,再重新运行npm install,确保依赖是基于当前系统环境安装的。环境变量差异:像
LC_ALL、LANG这类和语言相关的环境变量,Ubuntu和Fedora的默认设置可能不一样。如果Turndown的构造函数依赖系统语言环境变量,当Ubuntu上的变量设置不符合预期时,就会触发错误。你可以在两个系统里分别运行echo $LC_ALL和echo $LANG对比,尝试在Ubuntu上临时设置LC_ALL=en_US.UTF-8后再运行Turndown,看看问题是否解决。Turndown版本的隐性兼容问题:虽说你安装了最新版,但不排除不同系统上安装的Turndown存在细微版本差异?不过这个概率比较低,还是先优先排查前面几个点。
建议你先从对比Node.js版本和重新安装依赖开始排查,这两个是跨发行版npm包问题最常见的根源。
内容的提问来源于stack exchange,提问作者GalleyWest

