Как добавить пользовательский скрипт в файл package.json, который запускает файл javascript?


177

Я хочу иметь возможность выполнить команду script1в каталоге проекта, который будет выполняться node script1.js.

script1.jsэто файл в том же каталоге. Команда должна быть специфичной для каталога проекта, а это означает, что если я отправлю кому-то еще папку проекта, они смогут выполнить ту же команду.

До сих пор я пытался добавить:

"scripts": {
    "script1": "node script1.js"
}

в мой файл package.json, но когда я пытаюсь запустить, script1я получаю следующий вывод:

zsh: command not found: script1

Кто-нибудь знает шаги, необходимые для добавления вышеупомянутого скрипта в папку проекта?

* Примечание: команда не может быть добавлена ​​в профиль bash (не может быть специфичной для машины)

Пожалуйста, дайте мне знать, если вам нужны какие-либо разъяснения.


3
как вы пытаетесь запустить его? вы используете "npm run script1"?
niorad

3
ты запускал script1 используя npm run script1?
Claudiordgz

@Claudiordgz прав, или, как в ответе Суджита, «npm start» и «npm test» - это ярлыки для сценариев «start» и «test»
mjohnsonengr

1
в моем терминале мне нужно иметь возможность набрать команду из одного слова, script1которая должна выполнятьсяnode script1.js
Jake.JS

Ответы:


261

Пользовательские сценарии

npm run-script <custom_script_name>

или

npm run <custom_script_name>

В вашем примере вы хотели бы запустить npm run-script script1или npm run script1.

Смотрите https://docs.npmjs.com/cli/run-script

Скрипты жизненного цикла

Узел также позволяет запускать пользовательские сценарии для определенных событий жизненного цикла, как после npm installзапуска. Их можно найти здесь .

Например:

"scripts": {
    "postinstall": "electron-rebuild",
},

Это будет работать electron-rebuildпосле npm installкоманды.


1
npm run-script scriptnameработал для меня, однако npm run scriptnameне сделал!
blueprintchris

Как можно запустить собственный скрипт без команды «run»? Sails.js дозирует это - у него есть команда, sails liftкоторая даже требует NPM. Добавляет ли установка через NPM терминальный скрипт в систему, где он установлен? Если нет, то как это сделать?
Гал Грюнфельд

@ GalGrünfeld Вы установили паруса по всему миру (npm install -g)?
Ив

Я прочитал и, насколько я помню, с сайта Sail, установив его глобально (через -g), обнаружил, что Sails устанавливает скрипты bash / cmdlet (например, sails generate api <api_name>(bash / cmdlet в зависимости от компьютера, на котором он устанавливается) и добавляет глобальные пути к этим сценариям на машине
Гал Грюнфельд

как запустить файл js скачанного пакета npm через мой package.json?
Хардик Рана

26

Я создал следующее, и оно работает в моей системе. Пожалуйста, попробуйте это:

package.json:

{
  "name": "test app",
  "version": "1.0.0",
  "scripts": {
    "start": "node script1.js"   
  }
}

script1.js:

console.log('testing')

Из вашей командной строки выполните следующую команду:

npm start

Дополнительный вариант использования

Мой файл package.json содержит, как правило, следующие сценарии, которые позволяют мне просматривать мои файлы на предмет машинописных текстов, сборок sass и запуска сервера.

 "scripts": {
    "start": "concurrently \"sass --watch ./style/sass:./style/css\" \"npm run tsc:w\" \"npm run lite\" ",    
    "tsc": "tsc",
    "tsc:w": "tsc -w", 
    "lite": "lite-server",
    "typings": "typings",
    "postinstall": "typings install" 
  }

1
команда для запуска script1.jsфайла должна быть настраиваемой командой из одного слова с именемscript1
Jake.JS

затем измените "start"на script1, вы можете использовать любое имя, которое вам нравится, я предпочитаю использовать его, startчтобы четко определить, что должно выполняться
Sujeet Jaiswal

3
@ sujeet-jaiswal, простой переход с начала на script1 не будет работать. Слово «старт» зарезервировано в npm, поэтому оно работает. Слово script1 не является и не будет распознано, даже если оно определено в package.json Ответ wesleysmyth выше является правильным, просто добавьте run к вызову.
Предраг Стоядинович

18

Шаги ниже:

  1. В package.json добавьте:

    "bin":{
        "script1": "bin/script1.js" 
    }
  2. Создайте binпапку в каталоге проекта и добавьте файл runScript1.jsс кодом:

    #! /usr/bin/env node
    var shell = require("shelljs");
    shell.exec("node step1script.js");
  3. Запустить npm install shelljsв терминале

  4. Запустить npm linkв терминале

  5. Из терминала вы можете запустить, script1который будет работатьnode script1.js

Ссылка: http://blog.npmjs.org/post/118810260230/building-a-simple-command-line-tool-with-npm


Это должен быть принятый ответ, основанный на комментарии @ Jake.JS к его вопросу, т.е. о том, как запустить его с помощью одной команды.
AdamJB

Это должен быть принятый ответ, основанный на вопросе
Дамиан

2

Допустим, в скриптах вы хотите запустить 2 команды одной командой:

"scripts":{
  "start":"any command",
  "singleCommandToRunTwoCommand":"some command here && npm start"
}

Теперь иди к своему терминалу и беги туда npm run singleCommandToRunTwoCommand.


Хотя это полезно, это не дает прямого ответа на вопрос ОП.
AdamJB

1
По сути, мы нацелены на то, чтобы идти по правильному пути, более того, вы сами делаете это. Это правильный способ обучения.
Собан Аршад

@AdamJB Он делает, потому что он использовал npm run <script_name>
Кубадев

@kubadev, я не хочу быть педантичным, просто указывал, что ОП требует, чтобы скрипт запускался командой из одного слова согласно его собственному комментарию к его вопросу:In my terminal I need to be able to type the one word command called script1 which should run node script1.js
AdamJB

1

Пример:

  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build --prod",
    "build_c": "ng build --prod && del \"../../server/front-end/*.*\" /s /q & xcopy /s dist \"../../server/front-end\"",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },

Как видите, скрипт build_c строит угловое приложение, затем удаляет все старые файлы из каталога и, наконец, копирует полученные файлы сборки.


2
Вот некоторая полезная информация о &&- stackoverflow.com/questions/39172536/…
Simon_Weaver
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.