npm link 的使用

201 阅读1分钟

npm link

npm link 把本地的两个文件夹关联起来,我们创建 A_link_modoule 和 B_link_demo 文件夹.(关联只是把 A_link_modoule 文件夹整个拷贝到 B_link_demo 的 node_modules 下)

解决的问题

1、在公司项目开发中写一个私有包来解决通用问题,如果发布到线上每次修改会很麻烦,且线上版本会越来越多。
2、公司团队开发用同一套框架,并有多个npm把通用的情况下,用 npm link 管理通用包的版本和更新迭代。

实现

cd A_link_modoule 目录下,执行 npm init

{
  "name": "npmlinkname",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "axios": "^0.24.0"
  }
}

init的时候 package.json 中的 name 就是后续引入包的 名称
添加一个index.js

module.exports = {
  name: "linkName",
  sayHello: () => {
    console.log('哈哈哈,npm link 成功')
  }
}

cd B_link_demo 目录下
添加 dome.js

let linkModule = require('npmlinkname')
console.log(linkModule.name)  
linkModule.sayHello()  

执行 node dome.js 会报错: npmlinkname 模块找不到

cd 到 A_link_modoule 执行 npm link 会得到

xxx路径1 -> xxxx路径2

复制 xxxx路径2

cd B_link_demo 目录下 执行

npm link xxxx路径2

这时候会发现 B_link_demo 目录下的 node_modules 多了个 npmlinkname 文件夹,里面的内容就是 A_link_modoule下的内容。

再次执行 node dome.js

let linkModule = require('npmlinkname')
console.log(linkModule.name)   // npmlinkname
linkModule.sayHello()   // 哈哈哈,npm link 成功

如果 A_link_modoule 下npm install xxxx 之后,在 B_link_demo 中的引入路径需要注意下

let linkModule = require('npmlinkname')
let xxxx = require('npmlinkname/node_modules/xxxx')   // 引用路径需要注意


之后就可以想平常install之后的包使用方式调用了。


console.log(linkModule.name)   // npmlinkname
linkModule.sayHello()   // 哈哈哈,npm link 成功