2017-02-21 53 views
7

我有一個內部項目,我想將一個命令鏈接到一個文件bin。像預計這種package.json如何在安裝時直接執行'npm link'

{ 
    "name": "my-project", 
    "bin": { 
    "cli-name": "./bin/my-executable.js" 
    }, 
    "dependencies": { 
    "node-red": "^1.0.0" 
    } 
} 

當執行npm install,所有的依賴將被安裝,並node-redbin配置也將被創建。我的bin將被完全忽略。無法在cmd中使用cli-name。第二步也需要執行npm link。然後cli-name將作爲命令在控制檯中可用。我甚至試着使用的npm在它npm link一個postinstall劇本,但後來我得到了一個環......

有沒有辦法在一個步驟上npm install做到這一點?

回答

1

實際上似乎沒有內置的方式來自動執行這些任務。所以我直接向npm創建了這個功能的請求。看起來像npm il這樣的新命令可以實現。

我會在此處或其他方式更新此處。

https://github.com/npm/npm/issues/15999

0

您可以嘗試package.json改變你是這樣的:

{ 
    "name": "my-project", 
    "script": { 
    "cli-name": "./bin/my-executable.js", 
    "postinstall": "npm run cli-name" 
    }, 
    "dependencies": { 
    "node-red": "^1.0.0" 
    } 
} 

而且只需運行:

npm install 
+0

謝謝您的回答。但這不是我想要的。我需要一個自己的註冊名稱,而不是由npm執行腳本。我想要運行'npm link'的結果相同。 – eisbehr

+0

我的不好,不明白那部分 – jccguimaraes

+0

@eisbehr有沒有理由不能使用'npm link'作爲'postinstall'腳本? 'postinstall'在npm自動安裝後執行。 https://docs.npmjs.com/misc/scripts 編輯:我看到你最終陷入了無限循環,就像我一樣。 –

0

您可以在package.json創建一個腳本,像這樣做的兩個任務在一個命令:

{ 
    "name": "my-project", 
    "bin": { 
    "cli-name": "./bin/my-executable.js" 
    }, 
    "scripts": { 
    "install-link": "npm install && npm link my-project" 
    }, 
    "dependencies": { 
    "node-red": "^1.0.0" 
    } 
} 

然後只要運行npm run install-link,它會運行這兩個命令。

+0

你好,非常感謝你的回覆。但這正是我不想擁有的。 – eisbehr

+0

如果這不是你想要的,'postinstall'不適合你,我認爲你唯一的選擇就是如果你「堅持」修改'npm install'的行爲,就是將[npm ](https://github.com/npm/npm)回購並在那裏進行更改,或者創建一個請求,併成爲貢獻者。似乎只是爲了能夠將命令/功能鏈接在一起而過度使用。 – grizzthedj

0

npm-link的確是爲了不同的目的。在你做npm install的那一刻,你應該可以在命令行中使用它。

npm鏈接用於將您當前的開發文件夾鏈接到已安裝的軟件包目錄。這是因爲,當您在開發文件夾中進行更改時,它在cli上自動可用,並且不必重新安裝。

安裝後,嘗試去usr/local/bin < - 這是它應該在的地方。如果你在這裏找不到我的executable.js。然後在安裝過程中出現問題。

0

爲了運行global二進制(bin)模塊,您需要全局安裝它。

npm -g install

https://bretkikehara.wordpress.com/2013/05/02/nodejs-creating-your-first-global-module/

另一種選擇(如果你在Linux上)是使用$(npm bin)/<module>如果不是全局安裝。

+0

感謝您的反饋。但我認爲這不是在全球範圍內安裝所有鏈接二進制文件的最佳建議(我甚至沒有經過測試,如果這樣做的話)。而'npm link'也可以在沒有全局安裝的情況下運行。所以我希望有一個更好的方法...... – eisbehr

+0

你可以在沒有'-g'的情況下運行二進制文件,這只是執行它的最簡單的方法,'$(npm bin)'將解析二進制文件而不用全局安裝。 –