網站搜尋

node.js - 使用作用域匯入本地 npm 套件


我的單一代碼庫:

/app1
  package.json
/app2
  package.json
/shared
  package.json

shared/package.json 有 "name": "@company/shared"。

應用程式專案的 package.json 檔案具有依賴 "@company/shared": "file:../shared"。

在引用共享代碼時,我希望使用「簡短」風格,這種風格在移動內容時也不容易出錯:

import { foo } from "@company/shared"

但那行不通,所以我必須這麼做:

import { foo } from "../../../../../shared/src/something"

我嘗試修改了 package.json 和 tsconfig.json,但沒有成功。

我該如何設置那個?

答案#1

你應該使用 npm-link 將你的共享套件連結到依賴套件。

cd ~/shared                 # go into the package directory
npm link                    # creates global link
cd ~/app1                   # go into some other package directory.
npm link @company/shared    # link-install the package

這將告訴 npm 從共享資料夾安裝套件,並隨原始套件的任何變更進行更新

更多資訊請參見 https://docs.npmjs.com/cli/link.html

編輯:我直到現在才意識到你打算將共享的套件上傳到伺服器。在那種情況下,你可以使用 module-alias 套件,https://www.npmjs.com/package/module-alias

這將允許你進行像 const sharedModule=require('@shared/moduleName'); 這樣的匯入

編輯 #2:對於 TypeScript,請使用 https://www.npmjs.com/package/tsconfig-paths

答案#2

事實上,我上面的程式碼有一部分遺漏了。

共享專案需要在 index.js 中匯出共享的內容(即「桶」文件),並在 package.json 中引用它:

"main": "dist/index.js",
"types": "dist/index.d.ts",

然後別名匯入方式就能使用了。