簡體   English   中英

如何將本地模塊指定為 npm 包依賴項

[英]How to specify local modules as npm package dependencies

我有一個應用程序,它具有依賴關系下 package.json 文件中指定的第三方模塊(例如“express”)的通常依賴項集。 例如

"express"     : "3.1.1"

我想以模塊化方式構建自己的代碼,並通過 package.json 安裝一組本地(即在我當前所在的文件系統上)模塊。 我知道我可以通過運行來安裝本地模塊:

npm install path/to/mymodule

但是,我不知道如何通過 package.json 依賴結構來實現這一點。 在此命令中使用--save選項只是將"mymodule": "0.0.0"放入我的 package.json 中(不引用文件路徑位置)。 如果我然后從 node_modules 中刪除已安裝的版本,並嘗試從 package.json 重新安裝,它會失敗(因為它在中央注冊表中查找“mymodule”,而不是在本地查找)。

我確定這是一種告訴"dependencies": {}結構我希望它從文件系統路徑安裝的方式,但不知道如何。

還有其他人有這個問題嗎? 謝謝。

npm install現在支持這個

npm install --save ../path/to/mymodule

為此,必須將mymodule配置為具有自己的package.json的模塊。 請參閱創建 NodeJS 模塊

從 npm 2.0 開始,本機支持本地依賴項。 請參閱danilopopeye 對類似問題的回答 我在這里復制了他的回答,因為這個問題在網絡搜索結果中排名很高。

此功能在 npm 的 2.0.0 版本中實現。 例如:

{
  "name": "baz",
  "dependencies": {
    "bar": "file:../foo/bar"
  }
}

以下任何路徑也是有效的:

../foo/bar
~/foo/bar
./foo/bar
/foo/bar

同步更新

由於npm install <folder>將目錄中的包作為符號鏈接添加到當前項目中,因此對本地包的任何更改都會自動同步。

請參閱: package.json 中的本地依賴項

看起來答案是npm linkhttps ://docs.npmjs.com/cli/link

最后我找不到一個簡潔的方法,所以我去創建一個名為local_modules的目錄,然后將此 bashscript 添加到 scripts->preinstall 中的 package.json

#!/bin/sh
for i in $(find ./local_modules -type d -maxdepth 1) ; do
    packageJson="${i}/package.json"
    if [ -f "${packageJson}" ]; then
        echo "installing ${i}..."
        npm install "${i}"
    fi
done

在使用npm link命令(開發本地模塊而不將它們發布到注冊表或在 node_modules 文件夾中維護單獨副本的建議解決方案)苦苦掙扎之后,我構建了一個小型 npm 模塊來幫助解決這個問題。

修復需要兩個簡單的步驟

第一的:

npm install lib-manager --save-dev

其次,將其添加到您的package.json

{  
  "name": "yourModuleName",  
  // ...
  "scripts": {
    "postinstall": "./node_modules/.bin/local-link"
  }
}

更多詳細信息,請訪問https://www.npmjs.com/package/lib-manager 希望它可以幫助某人。

你可以在你的項目中添加到你的 package.json 文件中

"package-name" : "path/to/package"

然后在你的項目中運行npm i

如果可以簡單地將預先安裝在 node_modules 中的模塊與其他文件一起發布是可以接受的,則可以這樣做:

// ./node_modules/foo/package.json
{ 
  "name":"foo",
  "version":"0.0.1",
  "main":"index.js"
}

// ./package.json
...
"dependencies": {
  "foo":"0.0.1",
  "bar":"*"
}

// ./app.js
var foo = require('foo');

您可能還想將模塊存儲在 git 上並告訴您的父 package.json 從 git 安裝依賴項: https ://npmjs.org/doc/json.html#Git-URLs-as-Dependencies

在工作中,我們有一個公共庫,供幾個不同的項目使用,它們都在一個存儲庫中。 最初我們使用已發布的(私有)版本(npm install --save rp-utils),但這會導致我們在開發過程中進行大量不必要的版本更新。 該庫位於應用程序的姊妹目錄中,我們可以使用相對路徑而不是版本。 而不是 package.json 中的 "rp-utils": "^1.3.34" 現在是:

{ 
  "dependencies": { ...
    "rp-utils": "../rp-utils",
   ...

rp-utils 目錄包含一個可發布的 npm 包

使用本地安裝

我遇到了來自本地依賴項的沖突反應安裝問題。 我通過使用local-install npm 包解決了這個錯誤。 這個包不創建符號鏈接,這解決了我的問題。

腳步:

  1. 運行npm i -g local-install
  2. 在目標存儲庫中運行npx install-local --save <local-path>以安裝本地依賴項

進一步閱讀: https ://www.npmjs.com/package/install-local

嘗試使用npm install --save <local-directory>安裝本地軟件包時收到的錯誤:

錯誤:無效的掛鈎調用。 鈎子只能在函數組件的主體內部調用。 這可能由於以下原因之一而發生:

  1. 你可能有不匹配的 React 版本和渲染器(例如 React DOM)
  2. 您可能違反了 Hooks 規則
  3. 你可能在同一個應用程序中擁有多個 React 副本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM