2016-08-17 2 views
2

Я пытаюсь создать пакет, который можно установить глобально. Мой package.json имеет:npm глобальная установка, не использующая узел

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

я могу запустить его с «узлом index.js» и я могу опубликовать его в НПМ.

Проблема заключается в том, что когда я установить его глобально npm i -g my-new-package, на Windows, файл my-new-package.cmd является:

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

Так что, когда я исполняю my-new-package он открывает яваскрипт файл с редактором по умолчанию.

Напротив, другие глобальные пакеты используют 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" 
} 

теперь делают эти две каталоги, как дети реж 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); 

теперь получить в Dir my-new-package где файл package.json жизни и выдать глобальную команду установки

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 global bin в соответствии с

which my-executable-name 

, который отвечает

/home/stens/node-v6.5.0/bin/my-executable-name 
Смежные вопросы