Як додати спеціальний скрипт до файлу package.json, який працює з файлом javascript?


176

Я хочу мати змогу виконати команду 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 має рацію, або, як у відповіді Sujeet, "npm start" і "npm test" - це ярлики для сценаріїв під назвою "start" і "test"
mjohnsonengr

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

Відповіді:


260

Спеціальні сценарії

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 термінальний скрипт у систему, де він встановлений? Якщо ні, як це робиться?
Gal

@ 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 до виклику.
Predrag Stojadinović

17

Кроки наведені нижче:

  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.