2015-08-07 16 views
6

Tôi đã tìm thấy chính mình trong một tình huống mà tôi phải chạy một lệnh duy nhất, ví dụ: node compile.jsChạy Gói Node + Đối số từ một tập lệnh khác

rằng .js tập tin cần chạy sau

browserify -t jadeify client/app.js -o bundle.js

Tất cả các phụ thuộc được cài đặt, và bằng cách chạy lệnh này trong CLI hoạt động tốt, chỉ cần tìm ra cách để thực hiện nó từ trong một tập lệnh nút.

Chúng tôi cũng đã có bên trong package.json của chúng tôi như sau, trong đó có một cái gì đó tương tự như

"script" : [ "compile": "browserify -t jadeify client/app.js -o bundle.js" ] làm việc này một cách hoàn hảo khi bạn thực hiện cd /project && npm run compile qua ssh tuy nhiên không qua exec

Cảm ơn

+0

Khác với cách gọi một quá trình riêng biệt, bạn cũng có thể sử dụng [browserify api] (https://github.com/substack/node-browserify#api-example) trong bạn tệp 'compile.js'. – hassansin

+0

Chắc chắn, nhưng đây là những gì tôi không biết làm thế nào để làm, vì vậy cần một ví dụ/nó thực hiện - không thể tìm thấy bất kỳ kết quả trên google đó là hữu ích – Owen

+0

có thể trùng lặp của [node.js shell lệnh thực hiện] (http: // stackoverflow. com/q/14458508/1168892)? áp dụng giải pháp dẫn đến 'require ('child_process'). spawn ('browserify', ['-t', 'jadeify', 'client/app.js', '-o', 'bundle.js])' –

Trả lời

1

Bạn có thể truy cập đối số tập lệnh qua process.argv.

Mảng chứa đối số dòng lệnh. Phần tử đầu tiên sẽ là 'nút', phần tử thứ hai sẽ là tên của tệp JavaScript. Các phần tử tiếp theo sẽ là bất kỳ đối số dòng lệnh bổ sung nào.

Sau đó, bạn có thể sử dụng browserify api cùng với jadeify để nhận những gì bạn cần.

var browserify = require('browserify')(); 
var fs = require('fs'); 

var lang = process.argv[2]; 
console.log('Doing something with the lang value: ', lang); 

browserify.add('./client/app.js'); 
browserify.transform(require("jadeify")); 
browserify.bundle().pipe(fs.createWriteStream(__dirname + '/bundle.js')); 

Run nó với $ node compile.js enGB

2

Bạn nên có thể sử dụng số api-example và mở rộng nó bằng biến đổi như được đề xuất bởi đoạn ngọc bích setup.

var browserify = require('browserify'); 
var fs = require('fs'); 
var b = browserify(); 
b.add('./client/app.js'); 

// from jadeify docs 
b.transform(require("jadeify")); 

// simple demo outputs to stdout, this writes to a file just like your command line example. 
b.bundle().pipe(fs.createWriteStream(__dirname + '/bundle.js')); 
+0

Cảm ơn bạn Simon vì đầu vào hào phóng của bạn! Tôi sẽ có một cái nhìn vào tối nay - Tôi chưa bao giờ thực sự thực hiện bất kỳ kịch bản nút nào vì vậy đây là 100% mới cho tôi, vì vậy phản ứng rõ ràng và đơn giản của bạn được đánh giá cao. Tuy nhiên, bạn sẽ có thể chỉ cho tôi theo hướng như thế nào để vượt qua một biến/chuỗi vào kịch bản? ví dụ 'node compile.js --lang enGB', cảm ơn rất nhiều – Owen

+0

@owen Bạn nên xem https://www.npmjs.com/package/minimist, như được gợi ý trong câu trả lời trên http: // stackoverflow. com/questions/4351521/how-to-pass-command-line-arguments-to-node-js –

+0

@OwenMelbourne đã làm việc đó chưa? Tôi thấy bạn đặt một tiền thưởng, nhưng tại sao hỏi về php exec khi nó không có trong câu hỏi ban đầu? (Bạn sẽ có thể chạy phiên bản dòng lệnh bằng cách sử dụng php exec tốt, nếu nó không hoạt động, có thể là vấn đề với đường dẫn đến tệp thực thi, cài đặt môi trường hoặc liên quan đến quyền) –

Các vấn đề liên quan