(TODO)NPM使用笔记
文档第一:
1 | |
常用操作
初始化项目
1 | |
安装第三方包
常见问题
如何重命名安装的包?
这样就可以不修改项目代码的情况下,在不同环境使用不同的包:
1 | |
package-lock.json的作用是什么?
为什么npm install也修改了package.json里面的内容?
如果你当前的package.json里面,dependencies节点还没有创建或者没有数据,则npm install会给这个节点写入信息。如果已经有dependencies节点了,那么执行npm install就不会写入信息了。
经测试,即使有了dependencies,还是会写入package.json文件。
verification failed while extracting
网上提到的三种尝试方案:
1、删除package-lock.josn
2、清理掉npm缓存
3、重新安装高版本的npm
我试了3,发现不行,然后试了1,就可以了。
package.json中的版本号前缀
指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
波浪号(tilde)+指定版本:比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。
^号(caret)+指定版本:比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。~ 会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0
^ 会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0作者:涨停版
链接:https://www.jianshu.com/p/6061186a2733
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
export的时候,default有何作用?
参考这个文章:https://www.cnblogs.com/libin-1/p/7127481.html
default就是个默认名称,不要将其想复杂了。
1 | |
default这个语法糖的好处就是import的时候,可以省去花括号{}。
1 | |
几种不同的模块规范的差异
依赖版本冲突怎么办-resolutions配置项
类似这种:
1 | |
可以通过resolutions配置项来解决。
注意:resolutions 是 Yarn 的独有功能。resolutions 是 package.json 中用于强制指定依赖包版本的配置项,常用于解决依赖树中版本冲突问题。它通过覆盖子依赖的版本号,确保项目中所有层级的依赖使用统一版本,避免因版本不一致导致的兼容性问题:
1 | |
上传NPM包
导出时,是否必须加上default?
先说结论:一定要加上default
打包上传的模块,和本地模块似乎存在一些差异,不加default无法使用。
我之前是这样的(没加default):
1 | |
使用的时候是这样的:
1 | |
说明不加defalt,是无法导出内容的。
然后我修改成这样进行导出:
1 | |
再使用,则可以获取导出的对象了:
1 | |
部分导出也是可以的:
1 | |
使用自己上传的NPM包
This dependency was not found
这是我的NPM包的package.json中,main指定的入口文件路径写错了。
修改package.json中依赖的版本号,重新npm i,发现并未安装为指定版本的包
必须同时删除package-lock.json和node_modules下对应的包。
如果有任何一项没删除,都是不会安装成功的。
根据我测试的情况,npm确定哪个包要不要重新安装,应该是这样计算的:
- 查看node_modules下有没有这个包;如果有这个包,但是版本号和package.json不一致,也会当成有这个包了
- 如果node_modules下有这个包,而项目下没有package-lock.json文件,则会根据node_modules下的信息,生成package-lock.json文件
- 如果package-lock.json文件和node_modules下的包都没有,才会根据package.json下载包。
更改npm包版本
如果想要重新安装某个版本,也可以先卸载再安装:
1 | |
不加-S也会自动将修改同步到package.json中。
如何在HTML中直接引用包?
HTML中虽然也可以通过script标签加type=”module”直接引用JS模块,但是针对想要导出为NPM包的组件,并不适合,因为导出后,import进来的内容虽然显示为是一个Module对象,可根本无法获取其下的具体导出的成员。
而我们需要在HTML中直接引入包,一般是用于NPM组件项目自己编写Demo,这种场景还是单独开个路由,用专门的文件存放Demo的JS更好一些。
也就是将组件代码和Demo代码彻底分离,打包组件的时候,只打包库文件。
通过patch-package修改第三方npm包的内容
github:
https://github.com/ds300/patch-package
别人的使用笔记:
https://juejin.cn/post/6962554654643191815
https://www.jianshu.com/p/f83e7cc93bf5
不知道是否支持修改TypeScript的源码包。