2016-03-28 24 views
10

Để truy cập vào một biến môi trường trong các kịch bản NPM bạn sẽ làm một cái gì đó như thế này trong package.json của bạn:Tiếp cận biến môi trường trong package.json

"scripts": { 
    "preinstall": "echo ${npm_package_name}" 
} 

Vấn đề là chỉ hoạt động trong Unix, không phải Windows, nơi bạn có sử dụng %npm_package_name%.

Có cách nào để làm hệ điều hành này độc lập không? Sẽ tốt hơn nếu npm có thể thực hiện việc mở rộng biến như vậy, trước khi gọi lệnh.

+1

Các biến môi trường truy cập tốt ở đây có tác dụng gì? Tôi có thể truy cập vào chúng trong các phần khác của package.json, chẳng hạn như trong phần phụ thuộc không? – Michael

Trả lời

16

Để làm cho nó đa nền tảng, sử dụng cross-var:

"scripts": { 
    "preinstall": "cross-var echo ${npm_package_name}" 
} 
2

Không có cách nào để làm điều này độc lập với hệ điều hành.

Một cách giải quyết tốt nhất là thực hiện lệnh trong một kịch bản nút:

Thứ nhất, thay đổi lệnh preinstall để thực hiện một kịch bản nút:

"scripts": { 
    "preinstall": "node nameEcho.js" 
} 

Sau đó, bạn xác định các lệnh trong nameEcho. js file:

// require the package.json file 
var pjson = require('./package.json'); 

// echo the package's name 
console.log(pjson.name);