简介
npm 是前端开发中十分常用的包管理工具,但是在下载的时候往往会出现版本兼容性的问题。 npm
提供了 engine
属性用于向你的用户,提供你的软件(包)支持的 Node.js 版本范围。而 engine-check
则是检查包的引擎属性与当前环境的兼容性,并发出警告信息。
安装
npm install engine-check
使用
引入
const engineCheck = require('engine-check');
检查包的引擎属性与当前环境的兼容性
engineCheck().then(() => { // 兼容性检查通过,继续业务逻辑 console.log('兼容性检查通过'); }).catch(err => { // 兼容性检查未通过,不继续执行业务逻辑 console.error(err); });
深度解析
engine-check
核心原理
在 engine-check
指定从哪一级开始搜索 package.json
,它在读取 package.json
的时候,会先解析 engines
字段,然后匹配当前环境 Node.js 版本,判断是否符合条件。
-- -------------------- ---- ------- -- ----------- ----- ------- - ----------------------------------------- ----- ------- - ---------------- -- ------ ----------------------------------- -- - -- ----- --- ------- - ----------------- - -------------- - ---- - ------------------ - -------------- - --- -- ---- ------- -- ----- -------------- - ---------------- ----- --------- - --------------------------------- -------------------
semver.intersects
是 semver
模块的核心函数,用于比较版本号是否相交。
-- -------------------- ---- ------- -- -------------------------------------- -------- --------- -------- ------- -------- - --- -- -- ------- --- ----- - -------- -------- --------- ------ - --- ------- --- - ------ - --- ------------ ----------------------- - ----- ---- - ---------- -- ---- - ----- - - -- - - --------- -- ----------------------- ----- --- - ------ ------- - --- ---- ------- -- ----- - -- ------------------ -------- - -- --------------------------- - -- -------- -- ----------------------- - ---------------------------- - ----- - - -- ----- ------------- - ----- -- ----------------------------- - -- ------- ----------------- - ----- - - - ------ ----- -
engine-check
细节处理
engine-check
并不会强制要求包的engine
字段。- 当检查未通过时会抛出异常
Engine requirements not met
。 engine-check
会根据环境变量FORCE_ENGINE_CHECK
,决定是否强制进行兼容性检查(默认为false
)。
总结
engine-check
工具很好的解决了包版本兼容性问题。开发者可以使用此工具,规范化自己发布的 npm
包,提高自己的开发效率和用户体验。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066e26a563576b7b1ecf47