2017-02-21 11 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 будет установлена ​​вся зависимость, а bin конфигурация node-red будет создана тоже.

Но мой собственный bin будет полностью игнорироваться. Невозможно использовать cli-name в cmd. Необходимо также выполнить npm link, на втором шаге. Тогда cli-name будет доступен как команда в консоли. Я даже пытался использовать postinstall сценарий npm с npm link в нем, но потом я получил петлю ...

Есть ли способ сделать это за один шаг на 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' выполняется после' install' автоматически на 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 ссылка предназначена для связывания текущей папки разработки с установленной папкой вашего пакета. Это так, что, когда вы вносите изменения в свою папку разработки, она автоматически доступна в кли, и вам не нужно переустанавливать.

После установки попробуйте перейти к usr/local/bin < - Здесь и должно быть. если вы не можете найти my-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) 'будет решать двоичный файл без его установки по всему миру. –