• home > webfront > ECMAS > npm-node >

    npm link的使用:本地npm包修改不发布同步更新

    Author:zhoulujun Date:

    npm link用来在本地项目和本地npm模块之间建立连接,可以在本地进行模块测试。在需要的包执行npm link。然后再需要引入此包的项目根目录,执行npm link npmPackageName

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

    在这里,我们有两个项目

    • npm-link-module-test,是我们要开发的npm模块

    • webpack-item-example,是我们要运行npm模块的项目

    link建立

    首先,进入需要修改的包,在npm-link-module-test项目目录,执行npm link

    cd npm-link-module-test 
    npm link

    执行命令后,npm-link-module会根据package.json上的配置,被链接到全局,路径是{prefix}/lib/node_modules/<package>,这是官方文档上的描述,我们可以使用npm config get prefix命令获取到prefix的值(不过我这里使用的是windows,实际被链接到的路径是{prefix}/node_modules/<package>,不知道是不是npm升级的原因),如果是win系统的话,实际观察,会发现在{prefix}/lib/node_modules/<package>路径下的node-link-module是一个快捷方式

    然后,进入webpack-item-example项目目录,执行 npm pm-link-module-test 

    cd webpack-item-example
    npm link npm-link-module-test

    这样,这样npm 引用,就是link到项目

    解除link

    • 解除项目和模块link,项目目录下,npm unlink 模块名

    • 解除模块全局link,模块目录下,npm unlink 模块名

    npm link 将目标module链接到project的node_modules下,正常情况下是可以进行开发和调试。

    但由于module并不是真正地移动到了project的node_modules下,而是以一种链接的形式,所以,module无法使用project的node_modules下的其他包,而是单独维护一个node_modules,这在一般情况下并无异常,但在有些情况下却会发生出意外的错误

    在project和module有相同的依赖包,且这个包会因为存在两个实例出现问题时。

    比如我在npm link时对project里的A包做了一些操作,同时module里也有A包,这时两个A包并不是一个实例,它们互不影响。而在通过npm安装module时,它们用的都是一个A实例,这时可能就会出现一些问题

    那么有其他的解决方案吗?

    npm link 之外的解决方案

    alias 别名:可以在project中配置A的别名,以webpack为例:resolve: {alias: {'npm-link-module-test': ./npm-link-module-test}}

    软连接:ln -s /path/npm-link-module-test,具体参看:《mac或linux上面的软链接(符号链接)


    参考文章:

    npm link的使用 https://www.jianshu.com/p/aaa7db89a5b2

    npm link的基本用法及实例 https://blog.csdn.net/u014291497/article/details/75194456



    转载本站文章《npm link的使用:本地npm包修改不发布同步更新》,
    请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/nodejs/8553.html

    延伸阅读: