开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情
前言
在探索npm link原理的时候,发现npm link主要有两个用途
- 创建全局命令
- 本地包调试
那今天我们就主要讲讲本地包调试的n种方法,来对npm link加深理解
npm link
link的英文意思是链接,所以npm link的意思就是创建软连接的意思,类似于windows的创建快捷方式
在一个包下执行npm link,有两个作用:
- 1、如果这个包的
package.json有bin这个字段,那么会把这个包注册为一个全局命令去使用,同时也会把这个包安装到全局node_modules下面。
我们先试一下这种情况
"bin": {
"ce": "./lib/index.js"
},
在package.json中添加如上代码块
在命令行执行npm link进行添加package
然后我们在命令行输入npm root -g来看一下全局node_modules路径
/usr/local/lib/node_modules
发现里面的确有我们的包,包名称和package.json的name一样
接下来访问一下全局命令
open /usr/local/bin
发现里面也有我们的ce命令, good
- 2、如果这个包的package.json里面没有这个bin字段,那么会把这个包全局安装下node的
node_modules下面,使其成为一个全局的包。
首先我们先删除我们在全局的命令
npm unlink link -g// link是package名,因为我们是在全局建立的软连接,所以需要加上-g
然后我们在package.json中删除bin属性
此时我们
npm link
此时我们查看全局的node_modules就又能看到我们的包了
此时如果想使用这个link这个npm 包
只需要在需要使用的项目根目录下
npm link ${package name}
查看软连接是否成功,只需要在node_modules包下面看对应的npm包是否有个箭头,有就证明成功了
此时你修改npm包,那么项目中的npm就会变化,good
修改dependencies
只有成为一个全局包,在项目中引用这个包时,可以使用npm link ${package name}来安装这个全局包,如果没有成为全局的包,项目中包使用npm link ${package name}是无法安装这个包的。
不过可以使用npm install来安装这个包(假如没有使用npm link使其成为全局包),写法必须是用${package name}:'file: ${实际包地址}',而不是用版本号,版本号的话就从npm上安装了。
我们来亲自试一下
首先把全局软连接unlink掉
npm unlink link -g
然后在package.json中加上如下依赖
"dependencies": {
"link": "/Users/wson/Desktop/link"
}
执行npm install命令
此时我们在link包中添加根目录中添加index.js文件
内容如下
module.exports = {
aaa: 2222
}
然后我们在项目link1中引入link包,并输出aaa
const link = require('link');
console.log(link.aaa);
good
有的同学可能会问了,为什么引入link包,会输出link包中根目录index文件的内容
因为main属性指向了根目录的index文件