Javascript dosyasını çalıştıran package.json dosyama nasıl özel bir komut dosyası ekleyebilirim?


178

script1Çalıştırılacak bir proje dizininde komutu yürütmek istiyorum node script1.js.

script1.jsaynı dizindeki bir dosyadır. Komutun proje dizinine özgü olması gerekir; başka bir deyişle, proje klasörünü başka birine gönderirsem aynı komutu çalıştırabileceklerdir.

Şimdiye kadar eklemeyi denedim:

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

benim package.json dosyasına ama çalıştırmayı denediğimde script1aşağıdaki çıktıyı alıyorum:

zsh: command not found: script1

Yukarıda belirtilen komut dosyasını proje klasörüne eklemek için gereken adımları bilen var mı?

* Not: komut bash profiline eklenemez (makineye özel komut olamaz)

Herhangi bir açıklamaya ihtiyacınız varsa lütfen bana bildirin.


3
nasıl çalıştırmaya çalışıyorsun? "npm run script1" kullanıyor musunuz?
niorad

3
script1'i kullanarak çalıştırdınız npm run script1mı?
Claudiordgz

@Claudiordgz doğrudur veya Sujeet'in cevabında olduğu gibi, "npm start" ve "npm test", "start" ve "test" olarak adlandırılan komut dosyaları için kısayollardır
mjohnsonengr

1
terminalimde script1çalıştırılması gereken tek kelime komutunu node script1.js
yazabilmeliyim

Yanıtlar:


261

Özel Komut Dosyaları

npm run-script <custom_script_name>

veya

npm run <custom_script_name>

Örneğinizde, npm run-script script1veya komutunu çalıştırmak istersiniz npm run script1.

Bkz. Https://docs.npmjs.com/cli/run-script

Yaşam Döngüsü Komut Dosyaları

Düğüm ayrıca belirli bir yaşam döngüsü olayları için özel komut dosyaları çalıştırmanıza izin verir npm install. Bunlar burada bulunabilir .

Örneğin:

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

Bu electron-rebuildbir npm installkomuttan sonra çalışır .


1
npm run-script scriptnamebenim için çalıştı, ancak npm run scriptnameolmadı!
blueprintchris

"Run" komutu olmadan özel bir komut dosyasını çalıştırmak nasıl mümkün olur? Sails.js bunu dozlar - sails liftNPM gerektiren bir komuta sahiptir. NPM ile kurmak, kurulu olduğu sisteme bir terminal komut dosyası ekliyor mu? Değilse, bu nasıl yapılır?
Gal Grünfeld

@ GalGrünfeld küresel yelken yüklediniz mi (npm install -g)?
Yves Dorfsman

Sail'in web sitesinden hatırlayabildiğim kadarıyla küresel olarak yükleyerek (üzerinden -g) biraz okudum ve okudum, Sails'in bash / cmdlet komut dosyalarını yüklediğini öğrendim (örn. sails generate api <api_name>(Yüklendiği makineye göre bash / cmdlet) ve bu betiklere global yollar ekliyor
Gal Grünfeld

benim package.json aracılığıyla indirilen npm paketinin js dosyası nasıl çalıştırılır?
Hardik Rana

26

Aşağıdakileri yarattım ve sistemim üzerinde çalışıyor. Lütfen şunu deneyin:

package.json:

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

script1.js:

console.log('testing')

Komut satırınızdan aşağıdaki komutu çalıştırın:

npm start

Ek kullanım durumu

Benim package.json dosyamda genellikle benim script, sass derlemeler ve bir sunucu çalıştırmak için dosyalarımı izlemek için aşağıdaki komut dosyaları vardır.

 "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.jsdosyayı çalıştırma komutunun özel bir sözcük komutu olması gerekirscript1
Jake.JS

Daha sonra değiştirmek "start"için script1, istediğiniz herhangi bir ad kullanabilirsiniz, ben kullanmayı tercih startaçıkça çalıştırıp ne tanımlanmış
Sujeet jaiswal

3
@ sujeet-jaiswal basitçe başlangıçtan script1'e geçiş işe yaramaz. "Start" kelimesi npm'de ayrılmıştır, bu yüzden çalışır. Script1 kelimesi bilinmemektedir ve package.json içinde tanımlanmış olsa bile tanınmayacaktır. Yukarıdaki wesleysmyth cevabı doğru cevaptır, sadece çağrıya run ekleyin.
Predrag Stojadinović

18

Adımlar aşağıdadır:

  1. Package.json'da şunları ekleyin:

    "bin":{
        "script1": "bin/script1.js" 
    }
  2. binProje dizininde bir klasör oluşturun ve runScript1.jsşu kodu içeren bir dosya ekleyin :

    #! /usr/bin/env node
    var shell = require("shelljs");
    shell.exec("node step1script.js");
  3. npm install shelljsTerminalde çalıştır

  4. npm linkTerminalde çalıştır

  5. Terminalden şimdi çalıştıracak script1olannode script1.js

Referans: http://blog.npmjs.org/post/118810260230/building-a-simple-command-line-tool-with-npm


Bu, @ Jake.JS'nin sorusu hakkındaki yorumuna, yani tek bir komutla nasıl çalıştırılacağına dayanan kabul edilen cevap olmalıdır.
AdamJB

Bu, şu soruyu temel alan kabul edilen cevap olmalıdır
Damian

2

Komut dosyalarında 2 komutu tek bir komutla çalıştırmak istediğinizi varsayalım:

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

Şimdi terminalinize gidin ve oraya koşun npm run singleCommandToRunTwoCommand.


Yardımcı olurken, bu OP'nin sorusuna doğrudan cevap vermez.
AdamJB

1
Temel olarak, daha fazla kendi başınıza yaptığınız, rijit yola doğru rehberlik etmeyi amaçlıyoruz. Bu doğru öğrenme şeklidir.
Soban Arshad

@AdamJB Yapıyor, çünkü npm run <script_name> kullandı
Kubadev

@kubadev, bilgiçlik demek istemiyorum, sadece OP'nin senaryosunun sorusundaki kendi yorumuna göre tek bir kelime komutuyla çalıştırılmasını gerektirdiğini işaret ediyordu:In my terminal I need to be able to type the one word command called script1 which should run node script1.js
AdamJB

1

Misal:

  "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"
  },

Gördüğünüz gibi, "build_c" betiği açısal uygulamayı oluşturuyor, ardından tüm eski dosyaları bir dizinden siliyor ve son olarak sonuç oluşturma dosyalarını kopyalıyor.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.