Làm cách nào để thêm tập lệnh tùy chỉnh vào tệp pack.json chạy tệp javascript?


176

Tôi muốn có thể thực thi lệnh script1trong một thư mục dự án sẽ chạy node script1.js.

script1.jslà một tập tin trong cùng một thư mục. Lệnh cần phải cụ thể cho thư mục dự án, nghĩa là nếu tôi gửi cho người khác thư mục dự án, họ sẽ có thể chạy cùng một lệnh.

Cho đến nay tôi đã thử thêm:

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

vào tệp pack.json của tôi nhưng khi tôi thử chạy, script1tôi nhận được kết quả đầu ra như sau:

zsh: command not found: script1

Có ai biết các bước cần thiết để thêm tập lệnh được đề cập ở trên vào thư mục dự án không?

* Lưu ý: lệnh không thể được thêm vào hồ sơ bash (không thể là lệnh cụ thể của máy)

Xin vui lòng cho tôi biết nếu bạn cần bất kỳ làm rõ.


3
Làm thế nào bạn đang cố gắng để chạy nó? bạn đang sử dụng "npm run script1"?
niorad

3
bạn đã chạy script1 npm run script1chưa?
Claudiordgz

@Claudiordgz đã đúng, hoặc như trong câu trả lời của Sujeet, "npm start" và "npm test" là các phím tắt cho các kịch bản gọi là "bắt đầu" và "thử nghiệm"
mjohnsonengr

1
trong thiết bị đầu cuối của tôi, tôi cần có thể gõ lệnh một từ được gọi script1sẽ chạynode script1.js
Jake.JS

Câu trả lời:


260

Tập lệnh tùy chỉnh

npm run-script <custom_script_name>

hoặc là

npm run <custom_script_name>

Trong ví dụ của bạn, bạn sẽ muốn chạy npm run-script script1hoặc npm run script1.

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

Kịch bản vòng đời

Nút cũng cho phép bạn chạy các tập lệnh tùy chỉnh cho các sự kiện vòng đời nhất định, như sau khi npm installđược chạy. Đây có thể được tìm thấy ở đây .

Ví dụ:

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

Điều này sẽ chạy electron-rebuildsau một npm installlệnh.


1
npm run-script scriptnamelàm việc cho tôi, tuy nhiên npm run scriptnamekhông!
blueprintchris

Làm thế nào có thể chạy một tập lệnh tùy chỉnh mà không có lệnh "chạy"? Sails.js liều - nó có một lệnh sails liftthậm chí yêu cầu NPM. Việc cài đặt nó qua NPM có thêm tập lệnh đầu cuối trên hệ thống đã cài đặt không? Nếu không, làm thế nào được thực hiện?
Gal Grünfeld

@ GalGrünfeld bạn đã cài đặt buồm trên toàn cầu (npm install -g)?
Yves Dorfsman

Tôi đã và tôi đã đọc một số thứ mà tôi có thể nhớ được từ trang web của sail, cài đặt nó trên toàn cầu (thông qua -g), phát hiện ra rằng Sails cài đặt các tập lệnh bash / cmdlet (ví dụ sails generate api <api_name>(bash / cmdlet theo máy mà nó cài đặt) và thêm đường dẫn toàn cầu vào các tập lệnh trên máy.
Gal Grünfeld

Làm cách nào để chạy tệp js của gói npm đã tải xuống thông qua gói.json của tôi?
Hardik Rana

26

Tôi đã tạo ra những điều sau đây và nó đang hoạt động trên hệ thống của tôi. Vui lòng thử điều này:

gói.json:

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

script1.js:

console.log('testing')

Từ dòng lệnh của bạn chạy lệnh sau:

npm start

Trường hợp sử dụng bổ sung

Tệp pack.json của tôi thường có các tập lệnh sau, cho phép tôi xem các tệp của mình để tìm bản thảo, biên dịch sass và chạy máy chủ.

 "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
lệnh để chạy script1.jstệp cần phải là lệnh một từ tùy chỉnh được gọi làscript1
Jake.JS

sau đó đổi "start"thành script1, bạn có thể sử dụng bất kỳ tên nào bạn thích, tôi thích sử dụng startđể xác định rõ ràng những gì nên chạy
Sujeet Jaiswal

3
@ sujeet-jaiswal chỉ cần thay đổi từ bắt đầu sang script1 sẽ không hoạt động. Từ "bắt đầu" được dành riêng trong npm, vì vậy nó hoạt động. Từ script1 không phải và nó sẽ không được nhận ra, ngay cả khi nó được định nghĩa trong pack.json Câu trả lời wesleymyth ở trên là câu trả lời đúng, chỉ cần thêm chạy vào cuộc gọi.
Predrag Stojadinović

17

Các bước dưới đây:

  1. Trong gói.json thêm:

    "bin":{
        "script1": "bin/script1.js" 
    }
  2. Tạo một binthư mục trong thư mục dự án và thêm tệp runScript1.jsvới mã:

    #! /usr/bin/env node
    var shell = require("shelljs");
    shell.exec("node step1script.js");
  3. Chạy npm install shelljstrong thiết bị đầu cuối

  4. Chạy npm linktrong thiết bị đầu cuối

  5. Từ thiết bị đầu cuối bây giờ bạn có thể chạy script1sẽ chạynode script1.js

Tham khảo: http://blog.npmjs.org/post/118810260230/building-a-simple-command-line-tool-with-npm


Đây phải là câu trả lời được chấp nhận dựa trên @ Jake.JS nhận xét về câu hỏi của anh ấy, tức là làm thế nào để chạy nó bằng một lệnh duy nhất.
AdamJB

Đây phải là câu trả lời được chấp nhận dựa trên câu hỏi
Damian

2

Hãy nói trong tập lệnh bạn muốn chạy 2 lệnh bằng một lệnh duy nhất:

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

Bây giờ đi đến thiết bị đầu cuối của bạn và chạy ở đó npm run singleCommandToRunTwoCommand.


Trong khi hữu ích, điều này không trả lời trực tiếp câu hỏi của OP.
AdamJB

1
Về cơ bản, chúng tôi dự định hướng dẫn trên con đường nghiêm ngặt, hơn bạn tự làm. Đây là cách học đúng đắn.
Soban Arshad

@AdamJB Anh ấy làm thế, vì anh ấy đã sử dụng npm run <script_name>
Kubadev

@kubadev, tôi không có ý là người phạm tội, chỉ nói rằng OP yêu cầu kịch bản phải được chạy bằng lệnh một từ theo nhận xét của riêng anh ấy về câu hỏi của anh ấy:In my terminal I need to be able to type the one word command called script1 which should run node script1.js
AdamJB

1

Thí dụ:

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

Như bạn có thể thấy, tập lệnh "build_c" đang xây dựng ứng dụng góc, sau đó xóa tất cả các tệp cũ khỏi một thư mục, sau đó sao chép các tệp xây dựng kết quả.


2
Dưới đây là một số thông tin hữu ích về &&- stackoverflow.com/questions/39172536/ từ
Simon_Weaver
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.