Fulvaz PlayGroud

npm进阶(补漏)

为自己的迷茫期背锅, 重新学习node, 多说几句, 在我看来node根本不是个适合的服务端工具, node只是个为前端服务的工具(至少现在看来), 既然糊里糊涂进了这个坑, 我也就懒得走了, 继续蹲下去. 我的目标是前端, 但不至于前端, 更重要是会使用node制作工具和轮子更好地开发前端.

也许还需要补充基础知识, 必要时跑后端去, 语言真的不是关键, 但我需要知识的深度和专精.

(看不到图? 插件还没写好啊)


##更新package

npm update 更新

npm outdated 测试是否有旧版本的包

##语义化版本管理

~ 忽略minor版本, 比如~1.2.0可以升级到1.2.4但是不能升级到1.3.0, 忽略minor升级

^ 忽略major版本升级

ps: 如果需要升级major版本的话, 需要删除依赖, 然后重新安装

##scoped package

@开头的包, 比如说usrename/package

###新建

npm init --scope=username

发布

一般这种包都是私有的, 如果需要发布成公共包

npm publish --access=public

安装

npm install @username/project-name --save

一样

How npm works

npm2

查看依赖树: npm ls

只看主要依赖’npm ls –depth=0’

你每一个依赖的依赖都会被冗余放置, 比如说, 你导入了a, b两个包, a依赖c, b也依赖c, 那么你的依赖目录里面会存在两个c, c是冗余的

npm3

npm3变得更加扁平了, 而非npm2那样的嵌套, 同时npm会根据安装顺序处理依赖

还是这个例子, B1.0已经安装, 如果需要导入一个依赖B的C, 则处理如下:

但这并不意味着npm解决了全部问题, 比如再安装一个D模块

B依然会重复, 因为B2.0无法安装在最高层

将B放到顶层

需要先将全部依赖B1.0的包更新为B2.0, 然后运行npm dedupe

Non-determinism

install order matters, 就是说, 在npm3里面, 不同环境的依赖树可能是不一样的, 比如像上面例子那样A更新了B的版本, 导致后续模块对B的依赖都是指向顶层的B, 而非嵌套的B