ฉันจะเพิ่มสคริปต์ที่กำหนดเองไปยังไฟล์ package.json ของฉันที่เรียกใช้ไฟล์จาวาสคริปต์ได้อย่างไร


176

ฉันต้องการที่จะสามารถที่จะดำเนินการคำสั่งในไดเรกทอรีโครงการที่จะทำงานscript1node script1.js

script1.jsเป็นไฟล์ในไดเรกทอรีเดียวกัน คำสั่งจะต้องเฉพาะเจาะจงไปที่ไดเรกทอรีโครงการซึ่งหมายความว่าถ้าฉันส่งโฟลเดอร์โครงการอื่นให้พวกเขาจะสามารถเรียกใช้คำสั่งเดียวกันได้

จนถึงตอนนี้ฉันได้ลองเพิ่ม:

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

ไปยังไฟล์ package.json ของฉัน แต่เมื่อฉันลองเรียกใช้script1ฉันจะได้ผลลัพธ์ต่อไปนี้:

zsh: command not found: script1

ไม่มีใครรู้ขั้นตอนที่จำเป็นในการเพิ่มสคริปต์ดังกล่าวข้างต้นไปยังโฟลเดอร์โครงการหรือไม่

* หมายเหตุ: ไม่สามารถเพิ่มคำสั่งในโปรไฟล์ทุบตี (ไม่สามารถเป็นคำสั่งเฉพาะเครื่อง)

โปรดแจ้งให้เราทราบหากคุณต้องการคำชี้แจงใด ๆ


3
คุณพยายามเรียกใช้งานอย่างไร คุณใช้ "npm run script1" หรือไม่
niorad

3
คุณใช้ script1 โดยใช้npm run script1ไหม
Claudiordgz

@Claudiordgz ถูกต้องหรือเป็นในคำตอบของ Sujeet "NPM เริ่มต้น" และ "การทดสอบ NPM" เป็นทางลัดสำหรับสคริปต์ที่เรียกว่า "เริ่มต้น" และ "ทดสอบ"
mjohnsonengr

1
ในเทอร์มินัลของฉันฉันต้องสามารถพิมพ์คำสั่งหนึ่งคำที่เรียกว่าscript1ควรรันnode script1.js
Jake.JS

คำตอบ:


260

สคริปต์ที่กำหนดเอง

npm run-script <custom_script_name>

หรือ

npm run <custom_script_name>

ในตัวอย่างของคุณคุณจะต้องการที่จะทำงานหรือnpm run-script script1npm 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 Grünfeld

@ GalGrünfeldคุณติดตั้ง sails ทั่วโลก (ติดตั้ง npm -g) หรือไม่
Yves Dorfsman

ฉันมีและฉันได้อ่านบางส่วนและเท่าที่สามารถจำได้จากเว็บไซต์ของ Sail ติดตั้งทั่วโลก (ผ่าน-g) พบว่า Sails ติดตั้งสคริปต์ bash / cmdlet (เช่นsails generate api <api_name>(bash / cmdlet ตามเครื่องที่ติดตั้ง) และ เพิ่มเส้นทางทั่วโลกให้กับสคริปต์เหล่านั้นบนเครื่อง
Gal Grünfeld

วิธีการเรียกใช้ไฟล์ js ของแพ็คเกจ npm ที่ดาวน์โหลดผ่าน package.json ของฉัน
Hardik Rana

26

ฉันได้สร้างสิ่งต่อไปนี้และมันทำงานบนระบบของฉัน โปรดลองสิ่งนี้:

package.json:

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

script1.js:

console.log('testing')

จากบรรทัดคำสั่งของคุณเรียกใช้คำสั่งต่อไปนี้:

npm start

กรณีการใช้งานเพิ่มเติม

ไฟล์ package.json ของฉันมีสคริปต์ต่อไปนี้ซึ่งทำให้ฉันสามารถดูไฟล์ของฉันสำหรับ typescript, sass compilations และใช้งานเซิร์ฟเวอร์ได้เช่นกัน

 "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 ข้างต้นเป็นคำที่ถูกต้องเพียงเพิ่มการเรียกไปยังการโทร
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ตอนนี้ไปยังสถานีของคุณและทำงานที่นั่น


สิ่งนี้ไม่ได้ตอบคำถามของ OP โดยตรง
AdamJB

1
โดยทั่วไปเราตั้งใจจะนำไปสู่เส้นทางที่มีความเข้มงวดมากกว่าที่คุณทำด้วยตัวเอง นี่เป็นวิธีการเรียนรู้ที่เหมาะสม
Soban Arshad

@AdamJB เขาทำเพราะเขาใช้npm run <script_name>
Kubadev

@kubadev ฉันไม่ได้หมายถึงคนอวดดีเพียงชี้ให้เห็นว่า OP ต้องการให้สคริปต์รันด้วยคำสั่งหนึ่งคำตามความคิดเห็นของเขาสำหรับคำถามของเขา: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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.