准备
首先我们需要有两个npm包,一个作为依赖包,一个作为应用包。
依赖包:deps
应用包:app
然后仔仔细细的看一下依赖包的包名和输出路径,如main
好几次用法不对都是因为main字段配置的路径有问题
如我的依赖包package.json
{
"name": "deps",
"version": "1.0.0",
"description": "",
"main": "dist/index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "tsc",
"dev": "tsc -w"
},
"devDependencies": {
"@types/node": "^20.3.3"
}
}
那么如果使用webpack、tsc等构建工具,一定要确保构建工具的输出路径对应着package.json中的main路径,这样可以减少80%的调试时间
以全局为中转的npm link
对依赖包的操作
在依赖包的根路径,如~/Desktop/deps
,调用npm link
,此时会在全局node_modules中为该包创建一个软链接,可以通过npm list -g
查看当前的全局npm包列表
如果想要取消链接,需要在同一路径,即依赖包根路径~/Desktop/deps
,执行npm unlink -g
,切记要有-g
参数,否则无效
对应用包的操作
在应用包的根路径,如~/Desktop/app
,调用npm link deps
,此时会从全局node_modules中找到该包,并在当前路径的node_modules为该包创建一个软链接,可以通过npm list
查看当前目录的npm包列表
不需要在package.json中填写相应的依赖项
如果想要取消链接,需要在同一路径,即应用包根路径~/Desktop/app
,执行npm unlink deps
vscode中使用快捷建议
如果你使用的是vscode,且deps包导出了若干个变量,如export {depsFun1, depsFun2, depsFun3}
,那你可能希望在应用包中输入depsFun1
时,vscode可以自动在文件最上方添加import { depsFun1 } from 'deps'
,这不需要额外的操作,只要你的项目中有一个从deps包的引用,从第二个开始vscode即可快捷建议出deps包中的所有导出变量
直连的npm link
在应用包根路径~/Desktop/app
直接使用npm link ~/Desktop/deps
效果与上述相同,且更加方便
如果想要取消链接,需要在同一路径,即应用包根路径~/Desktop/app
,执行npm unlink deps
或npm unlink ~/Desktop/deps