Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

本地包调试 :npm link #91

Open
XXHolic opened this issue Oct 23, 2020 · 0 comments
Open

本地包调试 :npm link #91

XXHolic opened this issue Oct 23, 2020 · 0 comments

Comments

@XXHolic
Copy link
Owner

XXHolic commented Oct 23, 2020

引子

再次碰到调试 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

参考资料

🗑️

最近听了杨照主讲《史记》音频,对秦始皇的坑儒有了不一样的认知。

在《史记》里面,秦始皇想长生不死,养了很多方式,有一天有 2 个方式议论后,觉得不能继续呆在秦始皇身边了,就跑路了。秦始皇知道后很生气,就调查哪些方式弄虚作假,一下子牵连出了 460 人,都坑杀了,并昭告天下。坑儒就是指的这个事情。

上面只是大概说了一下,详细的可以去听听。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant