2017-04-07 44 views
0

我正在嘗試創建一個命令行實用程序。但是,npm install(no -g)不會鏈接可執行文件。package.json用於最小命令行實用程序

我的期望是npm install會在本地安裝我的可執行文件。

我的package.json樣子:

{ 
    "name": "test-bin", 
    "version": "0.1.0", 
    "description": "Test bin", 
    "bin": "./bin/test-bin.js", 
    "main": "./index.js", 
    "author": "", 
    "license": "ISC", 
    "repository": { 
    "type": "git", 
    "url": "file:///tmp/test-bin.git" 
    } 
} 

index.js是:

module.exports = function() { 
    console.log('invoked') 
} 

斌/測試bin.js是:

require('../')() 

如果我跑NPM安裝,node_modules創建,但不是.bin

但是,如果在其它位置創建另一個項目使用第一作爲一個依賴:

{ 
    "name": "test-test-bin", 
    "version": "0.1.0", 
    "description": "Test test bin", 
    "author": "", 
    "license": "ISC", 
    "repository": { 
    "type": "git", 
    "url": "file:///tmp/test-test-bin.git" 
    }, 
    "dependencies": { 
    "test-bin": "file:///Users/you/somewhere/test-bin" 
    } 
} 

然後NPM安裝鏈接在該項目中的可執行文件:

node_modules/.bin/test-bin 

故宮文件說,關於「斌」:

要使用此,在你的package.json這是 命令名稱映射到一個本地文件名提供一個倉場。在安裝時,npm會將 文件符號鏈接到全局安裝的前綴/ bin中,或者對於 本地安裝將./node_modules/.bin/符號鏈接到前綴/ bin中。

是按設計,還是我錯過了什麼?

回答

1

在包文件夾內運行npm install將安裝它的依賴關係,但它不會安裝包本身聲明的任何二進制文件(您可能會爭論這一點)。

,只有當封裝安裝爲包發生(使用npm install package-name或作爲其他包的依賴關係)。

+0

這就是我正在觀察的。它似乎直接抵觸了文件說的。那麼,這是一個錯誤,還是我誤解了文檔,或者在我需要做的過程中遺漏了一些東西? – wdkendall

+0

哦,我明白了文檔的意思。通過本地安裝,它們表示本地安裝包含可執行文件作爲依賴項的軟件包。 – wdkendall

+0

你是對的:你在本地('NPM安裝包name')和全球('NPM安裝包名-g')安裝,與不同之處,其中已安裝的軟件包結束(在'/ node_modules'對於本地系統範圍的全局'node_modules')。運行_just_'npm install'並沒有真正的AFAIK這樣的名字,但是安裝依賴關係的確如此。 – robertklep