将本地开发npm包模块链接到运行项目中

在本地开发npm包的时候,我们可以使用npm link命令,将npm包模块链接到运行项目中去,方便地对模块进行调试和测试,下面举例说明:

我们现在有两个项目

  1. local-dev 本地开发包
  2. run-pro 运行项目,用来测试我们开发的包

local-dev下执行npm init -y生成一个默认的包配置文件package.json,在目录下新建index.js如下,写个简单的时间戳转换为时间函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function timeStampToTime(timestamp){ // 时间戳转为时间
let date = new Date(timestamp);
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
month = month < 10 ? '0' + month : month;
day = day < 10 ? '0' + day : day;

let hour = date.getHours();
let min = date.getMinutes();
let sec = date.getSeconds();
let time = year + '-' + month + '-' + day + ' ' + hour + ':' + sec + ':' + sec;
return time;
}

module.exports = timeStampToTime;

然后执行 npm link 命令,local-dev 会根据package.json上的配置,被链接到全局,路径是{prefix}/lib/node_modules/<package>,这是官方文档上的描述,我们可以使用npm config get prefix命令获取到prefix的值(我使用的是windows,实际被链接到的路径是{prefix}/node_modules/<package>)

图1

我们可以看到,已经在这个目录下面生成了一个local-dev的快捷方式

再进入run-pro,执行npm init -y生成包文件,接着执行npm link local-dev

可以看到在这个项目的node_modules目录下生产了一个local-dev的快捷方式

图2

现在run-pro这个项目就可以引用这个local-dev这个模块了
我们在run-pro的目录下新建index.js文件,内容如下

1
2
3
let timeStampToTime = require('local-dev');
let timestamp = new Date().getTime();;
console.log(timeStampToTime(timestamp));

然后执行node index.js,可以看到命令行已经打印出函数的执行结果了

1
2
$ node index.js
2020-01-07 10:33:33

然后,我们修改下local-dev中的index.js文件的日期函数,返回结果就修改成返回斜线格式的日期

1
let time = year + '/' + month + '/' + day + ' ' + hour + ':' + sec + ':' + sec;

再回到run-pro目录下执行index.js,可以看到,返回结果已经变成了斜线的日期

1
2
$ node index.js
2020/01/07 10:31:31

看到了吧,所有对local-dev的修改会被直接映射到run-pro/node_modules/local-dev

坚持原创技术分享,您的支持将鼓励我继续创作!