2016-08-17 142 views
2

我試圖創建一個可以全局安裝的軟件包。我的package.json有:npm全局安裝不使用節點

{ 
    "name": "my-new-package", 
    "version": "1.0.0", 
    "main": "index.js", 
    "preferGlobal": true, 
    "bin": { 
    "my-new-package": "index.js" 
    } 
} 

我可以用「node index.js」運行它,我可以將它發佈到npm。

的問題是,當我安裝它在全球npm i -g my-new-package,在Windows文件my-new-package.cmd是:

@"%~dp0\node_modules\my-new-package\index.js" %*

所以,當我執行my-new-package它會打開默認的編輯器的JavaScript文件。

相比之下,其他全局軟件包使用node.exe。下面是cute-files.cmd例如:

@IF EXIST "%~dp0\node.exe" (
    "%~dp0\node.exe" "%~dp0\node_modules\cute-files\cute-files.js" %* 
) ELSE (
    @SETLOCAL 
    @SET PATHEXT=%PATHEXT:;.JS;=;% 
    node "%~dp0\node_modules\cute-files\cute-files.js" %* 

順便說一句,我得到了相同的行爲,當我在Linux上安裝它。

那麼如何配置我的軟件包以便在全局安裝時使用節點?

回答

2

這裏是如何創建一個全球可執行的NodeJS包

mkdir my-new-package 
cd my-new-package 

首先創建cat package.json

{ 
    "name": "my-new-package", 
    "version": "1.0.0", 
    "description": "global module my-new-package", 
    "main": "./lib/index.js", 
    "bin": { 
    "my-executable-name": "./bin/test-module.js" 
    }, 
    "author": "", 
    "license": "ISC", 
    "preferGlobal": "true" 
} 

現在做這兩個迪爾斯爲DIR my-new-package

mkdir bin 
mkdir lib 

這裏是孩子我們需要的另一個文件cat lib/index.js

var sayHello = function(name) { 
return 'Hello, ' + name; 
}; 

// Allows us to call this function from outside of the library file 
// Without this, the function would be private to this file 

exports.sayHello = sayHello; 

現在創建一個文件cat bin/test-module.js

#!/usr/bin/env node 

var lib= require('../lib/index.js'); 
var greeting = lib.sayHello('hello everyone'); 

console.log(greeting); 

現在進入目錄my-new-package其中file package.json生活併發出全球install命令

cd my-new-package 

npm install -g . 

通知的期限在上面安裝的命令

它的輸出會是這樣的

/home/stens/node-v6.5.0/bin/my-new-package -> /home/stens/node-v6.5.0/lib/node_modules/my-new-package/bin/test-module.js 
/home/stens/node-v6.5.0/lib 
└── [email protected] 

現在,它在全球範圍安裝,你可以在任何目錄

my-executable-name 

發出此同時,它會與

Hello, hello everyone 

有趣的是我們應對新的可執行文件生存在nodejs全局bin目錄中按照

which my-executable-name 

其中迴應

/home/stens/node-v6.5.0/bin/my-executable-name