Bagaimana cara menambahkan skrip khusus ke file package.json saya yang menjalankan file javascript?

176

Saya ingin dapat menjalankan perintah script1di direktori proyek yang akan berjalan node script1.js.

script1.jsadalah file dalam direktori yang sama. Perintah perlu spesifik ke direktori proyek, yang berarti bahwa jika saya mengirim orang lain folder proyek, mereka akan dapat menjalankan perintah yang sama.

Sejauh ini saya sudah mencoba menambahkan:

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

ke file package.json saya tetapi ketika saya mencoba menjalankan script1saya mendapatkan output berikut:

zsh: command not found: script1

Adakah yang tahu langkah-langkah yang diperlukan untuk menambahkan skrip yang disebutkan di atas ke folder proyek?

* Catatan: perintah tidak dapat ditambahkan ke profil bash (tidak bisa menjadi perintah khusus mesin)

Tolong beri tahu saya jika Anda membutuhkan klarifikasi.

Jake.JS
sumber
3
bagaimana Anda mencoba menjalankannya? Anda menggunakan "npm run script1"?
niorad
3
apakah Anda menjalankan script1 menggunakan npm run script1?
Claudiordgz
@Claudiordgz benar, atau seperti dalam jawaban Sujeet, "npm start" dan "npm test" adalah pintasan untuk skrip yang disebut "start" dan "test"
mjohnsonengr
1
di terminal saya, saya harus bisa mengetik satu kata yang disebut perintah script1yang harus dijalankannode script1.js
Jake.JS

Jawaban:

260

Skrip Khusus

npm run-script <custom_script_name>

atau

npm run <custom_script_name>

Dalam contoh Anda, Anda ingin menjalankan npm run-script script1atau npm run script1.

Lihat https://docs.npmjs.com/cli/run-script

Script Siklus Hidup

Node juga memungkinkan Anda untuk menjalankan skrip khusus untuk acara siklus hidup tertentu, seperti setelah npm installdijalankan. Ini dapat ditemukan di sini .

Sebagai contoh:

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

Ini akan dijalankan electron-rebuildsetelah npm installperintah.

wesleysmyth
sumber
1
npm run-script scriptnamebekerja untuk saya, tetapi npm run scriptnametidak!
blueprintchris
Bagaimana mungkin menjalankan skrip khusus tanpa perintah "jalankan"? Dosis Sails.js itu - ia memiliki perintah sails liftyang bahkan membutuhkan NPM. Apakah menginstalnya melalui NPM menambahkan skrip terminal pada sistem di mana ia diinstal? Jika tidak, bagaimana ini dibuat?
Gal Grünfeld
@ GalGrünfeld apakah Anda memasang layar secara global (npm install -g)?
Yves Dorfsman
Saya telah, dan saya membaca, dan sejauh yang dapat saya ingat dari situs web Sail, menginstalnya secara global (via -g), menemukan bahwa Sails menginstal skrip bash / cmdlet (mis. sails generate api <api_name>(Bash / cmdlet sesuai dengan mesin yang diinstalnya) dan menambahkan jalur global ke skrip-skrip tersebut di mesin
Gal Grünfeld
cara menjalankan file js dari paket npm yang diunduh melalui package.json saya?
Hardik Rana
26

Saya telah membuat yang berikut ini, dan itu berfungsi pada sistem saya. Silakan coba ini:

package.json:

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

script1.js:

console.log('testing')

Dari baris perintah Anda, jalankan perintah berikut:

npm start

Kasing penggunaan tambahan

File package.json saya umumnya memiliki skrip berikut, yang memungkinkan saya untuk menonton file saya untuk naskah, kompilasi sass dan menjalankan server juga.

 "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" 
  }
Sujeet Jaiswal
sumber
1
perintah untuk menjalankan script1.jsfile harus berupa perintah satu kata khusus yang disebutscript1
Jake.JS
lalu ubah "start"ke script1, Anda dapat menggunakan nama apa pun yang Anda suka, saya lebih suka menggunakan startuntuk menentukan dengan jelas apa yang harus dijalankan
Sujeet Jaiswal
3
@ sujeet-jaiswal hanya mengubah dari awal ke script1 tidak akan berfungsi. Kata "mulai" dicadangkan dalam npm, jadi itu berfungsi. Kata script1 tidak dan itu tidak akan dikenali, bahkan ketika itu didefinisikan dalam package.json Jawaban wesleysmyth di atas adalah yang benar, cukup tambahkan lari ke panggilan.
Predrag Stojadinović
18

Langkah-langkahnya di bawah ini:

  1. Dalam package.json tambahkan:

    "bin":{
        "script1": "bin/script1.js" 
    }
  2. Buat binfolder di direktori proyek dan tambahkan file runScript1.jsdengan kode:

    #! /usr/bin/env node
    var shell = require("shelljs");
    shell.exec("node step1script.js");
  3. Jalankan npm install shelljsdi terminal

  4. Jalankan npm linkdi terminal

  5. Dari terminal Anda sekarang dapat menjalankan script1yang akan berjalannode script1.js

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

Jake.JS
sumber
Ini harus menjadi jawaban yang diterima berdasarkan komentar @ Jake.JS pada pertanyaannya, yaitu bagaimana menjalankannya dengan satu perintah.
AdamJB
Ini harus menjadi jawaban yang diterima berdasarkan pertanyaan
Damian
2

Katakanlah dalam skrip Anda ingin menjalankan 2 perintah dengan satu perintah:

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

Sekarang pergi ke terminal Anda dan jalankan di sana npm run singleCommandToRunTwoCommand.

Soban Arshad
sumber
Meskipun bermanfaat, ini tidak langsung menjawab pertanyaan OP.
AdamJB
1
Pada dasarnya kami dimaksudkan untuk membimbing ke jalan yang kokoh, lebih dari yang Anda lakukan sendiri. Ini adalah cara belajar yang tepat.
Soban Arshad
@AdamJB Dia melakukannya, karena dia menggunakan npm run <script_name>
Kubadev
@kubadev, saya tidak bermaksud menjadi orang yang bertele-tele, hanya menunjukkan bahwa OP mengharuskan skrip dijalankan dengan perintah satu kata sesuai komentarnya sendiri pada pertanyaannya:In my terminal I need to be able to type the one word command called script1 which should run node script1.js
AdamJB
1

Contoh:

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

Seperti yang Anda lihat, skrip "build_c" adalah membangun aplikasi bersudut, lalu menghapus semua file lama dari direktori, lalu akhirnya menyalin hasil build file.

TemukanOutIslam Sekarang
sumber
2
Berikut ini beberapa info bermanfaat tentang &&- stackoverflow.com/questions/39172536/...
Simon_Weaver