本地包调试 :npm link

摘要:
简介再次遇到了调试npm本地包的情况。我一时想不起来了。我看了文件并实际操作了它。我发现了一些没有明确写在文档中的东西。步骤1:在包文件夹中执行npmlink,并使用全局文件{prefix}/lib/node_在modules/中,创建一个指向执行npmlik命令的位置的符号链接。步骤2:在其他目录中运行npmlinkpackageName命令,创建从全局安装的packageName到当前文件的节点_模块下的符号链接。修改后,如果我想恢复原始包,我应该如何取消链接?奇怪的是,在NPM的官方文件中没有找到任何解释。

引子

再次碰到调试 npm 本地包的情况,一时想不起来,看了下文档,实际操作了一下,发现了一些文档上没明写的东西。

介绍

根据文档介绍,包的链接分为两步。

第一步

在一个包文件夹内执行 npm link 将在全局文件 {prefix}/lib/node_modules/ 内,创建一个符号链接(symlink),这个链接指向 npm link 命令执行的地方。

第二步

到其它目录下,执行 npm link packageName 命令,将会创建一个从全局安装的 packageName 到当前文件内的 node_modules 下的符号链接。

需要注意的的是, packageName 是取自包的 package.jsonname 字段,不是文件夹名称。

包的名称可能有作用域前缀,如果有, packageName 也要对应加上。

实践

基于文档,结合实际的操作,对照看下产生的效果。

运行环境

  • 项目是基于 webpack 简单配置,本地运行的 server 。
  • node 使用 nvm 管理的。
  • 项目已引用了包,需在基础上进行修改调试。
  • 系统是 macOS 。

操作

首先在包根目录下面执行 npm link 命令,出现下面的提示:

79-link

到对应的目录下,发现生成了提示中所说的文件,就是文档中所说符号链接(symlink):

79-result

试着改了一下本地的源文件,发现全局包里面对应的文件内容也跟着变化。

然后到项目中执行 npm link packageName 指令,出现了下面的提示:

79-link-package

到 node_modules 下发现对应的依赖包已经发生了变化:

79-link-module

这里的包跟全局那个生成的包是一样的,包更新了,本地看没什么效果,原因是本地的 sever 有缓存,需要重新启动一下。注意这个文件夹图标多了一个箭头的标记,未 link 之前没有这个。

重启服务后,到源库修改源码,发现项目 node_modules 下同步了修改的内容,webpack 也检测到变化,自动刷新。

修改好后,想要恢复到原本的包,解除 link 该怎么做?很奇怪,在 npm 官方文档上没找到说明。

解除 link

到项目下执行下面的命令:

npm unlink --no-save package && npm install

npm uninstall 文档中可以发现,unlink 其实是 uninstall 的别名,实质上也是删除了包。

包不需要的 link 的时候,建议也解除,到包目录下执行下面的命令:

npm unlink
Back to top

参考资料

免责声明:文章转载自《本地包调试 :npm link》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# winform 多线程异步操作线程启动暂停与恢复Laravel中使用JWT下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) (转)

git pull的时候遇到 Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) y 于是一直输“y”就一直出现这样,查了下有人说那个文件重复了,删除即可(没试过)。也有说是因为文件被占用了,重启了编程软件输入以下代码解决了问题(也是查来的):...

Linux操作临时文件

使用临时文件要考虑几个问题: 保证临时文件间的文件名不互助冲突。 保证临时文件中内容不被其他用户或者黑客偷看、删除和修改。 Linux中提供了mkstemp 和 tmpfile 函数来处理临时文件。 mkstemp函数 int mkstemp(char *template); mkstemp函数在系统中以唯一的文件名创建一个文件并打开,而且只有当前用户...