有时候,在项目开发时,我们会为我们的项目开发一些独立模块。

按照模块依赖的引入,我们会使用require去做:

  • 如果模块已经发布在仓库中,我们可以直接require模块名
  • 如果没有在仓库中,我们可以使用路径去进行引入

对于前者而已,如果我们想要做调整或者测试,一定要发布到仓库上面,显然是不妥的。而后者的话,不管是使用相对路径还是绝对路径,写法上都不优雅。

其实,npm的命令中还有一个可以优雅解决我们当前需求的功能。

npm提供了link的功能,可以让我们使用本地模块就像使用仓库模块一样。

假设我们现在有两个项目:

  • my-utils,这个项目提供一些辅助工具,作为模块使用
  • my-project,这是业务的项目,提供服务。

my-project中,会使用到my-utils。那使用npm link的话,要怎么做呢?命令其实很简单:

1
2
3
4
5
6
# 进入到模块目录,创建模块链接
cd ~/projects/my-utils
npm link
# 进入项目目录,将要引入的模块使用link安装进来
cd ~/projects/my-project
npm link my-utils

执行上面的命令之后,任何我们在my-utils的改变,都会在
~/projects/my-project/node_modules/my-utils
中提现出来。那么我们只要修改my-utils,然后使用my-project查看效果便可以了。

我们也可以将上面的两步link合并成一步:

1
2
cd ~/projects/my-project
npm link ~/projects/my-utils

这与上面两条link命令的效果是一致的。

注意

需要注意的是,当我们执行:

1
2
3
# 进入到模块目录,创建模块链接
cd ~/projects/my-utils
npm link

这里link得到的模块名称,是从package.json中得到,并不是目录名称。