2014-04-21 20 views
6

Như chúng ta biết, bạn có thể chạy các lệnh tùy ý sử dụng npm run bằng cách thêm một hash scripts-package.json của bạn:Kịch bản lệnh 'npm run' nằm bên ngoài trong package.json trên Windows?

"scripts": { 
    "build-js": "browserify browser/main.js | uglifyjs -mc > static/bundle.js" 
} 

nào sau đó sẽ được chạy với npm run build-js.

Bạn cũng có thể di chuyển các lệnh này ra thành kịch bản riêng biệt, chẳng hạn như kịch bản bash, như vậy:

"scripts": { 
    "build-js": "bin/build.sh" 
} 

Điều này rõ ràng không natively làm việc trên Windows, do Windows không phải là khả năng chạy script bash . Bạn có thể cài đặt các cổng bash và như vậy, nhưng tôi muốn có thể sử dụng một số loại cấu trúc Windows nguyên bản để làm điều tương tự.

Tôi đã thử một số cách tiếp cận khác, trong đó có sử dụng child_process.exec để chạy các lệnh tùy ý từ bên trong một file nút kịch bản tiêu chuẩn:

"scripts": { 
    "build-js": "node bin/build.js" 
} 

Nhưng tôi đã nhận thấy child_process cuộn cảm trên hoạt động tương đối lớn/chuyên sâu, làm cho nó không thể sử dụng.

Có cách nào cụ thể cho Windows (hoặc thậm chí tốt hơn, đa nền tảng) để di chuyển các tập lệnh package.jsonnpm run này vào các tệp riêng biệt không? Tốt nhất là một trong đó không yêu cầu bash?

Trả lời

11

Từ a helpful article khi sử dụng NPM làm công cụ xây dựng, tại sao không chỉ sử dụng tệp JavaScript?

Dưới đây là ví dụ được đưa ra trong bài báo (một chút thay đổi cho rõ ràng):

// scripts/favicon.js 

var favicons = require('favicons'); 
var path = require('path'); 

favicons({ 
    source: path.resolve('../assets/images/logo.png'), 
    dest: path.resolve('../dist/'), 
}); 


// package.json 

"scripts": { 
    "build-favicon": "node scripts/favicon.js", 
}, 
"devDependencies": { 
    "favicons": "latest", 
} 

Trong đó sẽ được chạy trong terminal với lệnh npm run build-favicon

3

Sử dụng nút để chạy một file JS là một lựa chọn , nhưng nếu bạn cần chạy các lệnh hệ thống trên cả Windows và * NIX, điều đó sẽ làm cho kịch bản lộn xộn. Đối với tập lệnh đa nền tảng, hãy thử gói shelljs.

0

Sử dụng lệnh make cũng là một tùy chọn tốt.

Makefile

build-js: 
    browserify browser/main.js | uglifyjs -mc > static/bundle.js 

package.json

"scripts": { 
    "build-js": "make build-js", 
} 

Bạn có thể tìm thêm về makehere.

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