npm link的用法


npm link的用法

假如我們想自己開發一個依賴包,以便在多個項目中使用。
一種可行的方法,也是npm給我們提供的標准做法,那就是我們獨立開發好這個依賴包,然后將它直接發布到npm鏡像站上去,等以后想在其他項目中使用的時候,直接npm install moduleName。
但是,如果我們修改了這個依賴包的源碼,就要重新發布到npm鏡像站,這樣做相對來說會有一點麻煩。

我們希望有更方便一點的辦法,npm link就是這樣的一個簡便方案。

那么,npm link是怎么用的呢?下面我會用一個例子來說明npm link的用法。

我們創建一個名為npm-link-test的項目,整個項目的目錄結構如下圖所示。其中,allenModule95是一個用來為其他項目提供支持的依賴,本項目真正的代碼都放在myProject目錄下。

第一步,創建allenModule95依賴項目。

首先,在allenModule95下運行npm init命令,這會在allenModule95下生成package.json文件。
其次,我們再在allenModule95目錄下編寫index.js文件

//index.js module.exports = { name: "allenModule95", sayHello: function(){ console.log("hello allenModule95"); } } 

第二步,創建本項目真正的代碼。

首先,切換到myProject目錄下,新建一個demo.js文件

//demo.js var myModule = require("allenModule95"); console.log(myModule.name); myModule.sayHello(); 

其次,在終端窗口中運行這個demo.js, node demo.js。
但是這時候node會報錯。具體錯誤信息如下圖所示:

錯誤信息顯示“MODULE_NOT_FOUND”,這就是說demo.js文件中依賴的allenModule95模塊找不到。出現這個錯誤是因為,此時的require的搜尋目錄中沒有包含此模塊,所以require就找不到這個模塊。

用npm link解決這個問題

為了上面allenModule95模塊能夠被正確搜尋到,npm link可以上場了。

切換到allenModule95目錄下,並執行npm link 命令(注意,這個npm link不加任何參數)。
這個命令的作用是在全局環境下,也就是nodejs安裝目錄下的node_modules目錄下,生成一個符號鏈接文件,在windows下就是創建一個快捷方式文件,該文件的名字就是allenModule95目錄下package.json文件中指定的模塊名。因為,它是一個快捷方式,所以當我們在allenModule95下修改了什么東西,都會被全局的符號連接文件下面看到。

接下來,切換到myProject目錄下,將allenModule95模塊與此項目連接起來,執行npm link allenModule95就可以完成它們的連接。此時,我們就可以正確執行node demo.js了。

詳細執行過程見下圖:

使用同樣的方法,我們可以在任何其他目錄下使用allenModule95模塊,並且即使allenModule95模塊有所改動,這個改動也會被其他模塊同步知道,不需要我們像制作標准npm模塊那樣重新發布模塊到鏡像站點。

如果想解除某個項目與allenModule95的依賴關系,則可以在項目目錄下執行npm unlink allenModule95,這樣它們之間的連接關系就解除了。

如果想要從全局環境中,移除allenModule95模塊鏈接,則可以allenModule95模塊根目錄下執行npm unlink allenModule95,這樣就從全局環境中解除了allenModule95的連接。

這就是npm link命令的基本使用方法。

npm link在當前項目中使用全局安裝的模塊

上面的例子中npm link用來使用自己開發模塊,可是,更多的時候,我們是在使用npm的模塊倉庫即npm registry中的模塊,這時候也可以使用npm link命令。

比如,我們要開發很多應用,每個應用都用到 Coffee-script模塊 :
第一步,我們將coffee-script安裝到全局模式下。
npm install coffee-script -g # 全局模式下安裝coffee-script

第二步,在每一個要開發的應用中,連接全局安裝的coffee-script。
cd ~/work/node/test1 # 進入開發目錄
npm link coffee-script # 把全局模式的coffee-script模塊鏈接到本地的node_modules下
cd ../test2 # 進入另外的一個開發目錄
npm link coffee-script # 把全局模式的coffee-script模塊鏈接到本地
npm update coffee-script -g # 更新全局模式的coffee-script,所有link過去的項目同時更新了。

讀到這里,有的人對npm install -g的原理理解不清楚的人,可能會有點疑問,不是說全局安裝的包在每一個項目中都可以用嗎?為啥這里全局安裝了coffee-script,在具體的項目中要調用的時候卻要npm link呢?有這個疑問的朋友,應該是對npm install -g的理解有誤。
npm install -g moduleName是將模塊裝到全局目錄下,但是全局方式的安裝是供命令行(command line)使用的,比如grunt,全局安裝的模塊是沒有辦法用require調用包的。因為上面要在項目中requre包,所以必須先npm link一下。

轉載自:https://www.cnblogs.com/zhangzl419/p/15210835.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM