Trong Ubuntu, nó khá đơn giản; Tôi có thể chạy ứng dụng bằng cách sử dụng:
$ NODE_ENV=production node myapp/app.js
Tuy nhiên, điều này không hoạt động trên Windows. Có một tập tin cấu hình nơi tôi có thể đặt thuộc tính?
Trong Ubuntu, nó khá đơn giản; Tôi có thể chạy ứng dụng bằng cách sử dụng:
$ NODE_ENV=production node myapp/app.js
Tuy nhiên, điều này không hoạt động trên Windows. Có một tập tin cấu hình nơi tôi có thể đặt thuộc tính?
Câu trả lời:
Các phiên bản hiện tại của Windows sử dụng Powershell làm vỏ mặc định, vì vậy hãy sử dụng:
$env:NODE_ENV="production"
Câu trả lời của Per @ jsalonen dưới đây. Nếu bạn đang ở trong CMD (không còn được duy trì), hãy sử dụng
set NODE_ENV=production
Điều này sẽ được thực thi trong dấu nhắc lệnh nơi bạn định chạy ứng dụng Node.js của mình.
Dòng trên sẽ đặt biến môi trường NODE_ENV cho dấu nhắc lệnh nơi bạn thực thi lệnh.
Để đặt các biến môi trường trên toàn cầu để chúng tồn tại ngoài chỉ một dấu nhắc lệnh, bạn có thể tìm công cụ từ Hệ thống trong Bảng điều khiển (hoặc bằng cách nhập 'môi trường' vào hộp tìm kiếm trong menu bắt đầu).
set NODE_ENV=production && node app
. Thuận tiện hơn cấu hình của bạn cho package.json
phù hợp : "scripts": { "start": "set NODE_ENV=production && node app" }
.
echo %NODE_ENV%
để kiểm tra giá trị hiện tại của nó.
cross-env
là giải pháp tốt hơn cho vấn đề này nếu nhóm của bạn hoạt động trên các hệ điều hành hỗn hợp. Câu trả lời từ @MoOx sẽ là lựa chọn của tôi như một câu trả lời cho câu hỏi này.
Tôi vừa tìm thấy một gói Node.js đẹp có thể giúp rất nhiều để xác định các biến môi trường bằng một cú pháp duy nhất, đa nền tảng.
https://www.npmjs.com/package/cross-env
Nó cho phép bạn viết một cái gì đó như thế này:
cross-env NODE_ENV=production my-command
Mà là khá thuận tiện! Không có lệnh cụ thể của Windows hoặc Unix nữa!
Trong PowerShell:
$env:NODE_ENV="production"
set NODE_ENV=production
đã không làm việc cho tôi trong powershell nhưng điều này đã làm. Cảm ơn!
$env:NODE_ENV="development"; gulp runMytask
. Lưu ý dấu chấm phẩy trong đó. Tệp gulp có thể sử dụng logic có điều kiện trên process.env.NODE_ENV. Trừ khi bạn đặt nó, nó sẽ không được xác định.
cross-env NODE_ENV=production
tùy chọn thực sự là một giải pháp tốt hơn nếu chạy các lệnh npm từ pack.json yêu cầu env được đặt. Thật quá dễ dàng để rời env được đặt trên dev / prod sau khi sử dụng tùy chọn $ env: NODE_ENV
Sẽ thật lý tưởng nếu bạn có thể đặt tham số trên cùng dòng với lệnh gọi của mình để bắt đầu Node.js trên Windows. Nhìn vào những điều sau đây một cách cẩn thận và chạy nó chính xác như đã nêu:
Bạn có hai tùy chọn sau:
Tại dòng lệnh:
set NODE_ENV=production&&npm start
hoặc là
set NODE_ENV=production&&node index.js
Mẹo để nó hoạt động trên Windows là bạn cần xóa khoảng trắng trước và sau "&&". Định cấu hình tệp pack.json của bạn với start_windows (xem bên dưới) bên dưới. Sau đó, chạy "npm run start_windows" tại dòng lệnh.
//package.json
"scripts": {
"start": "node index.js"
"start_windows": "set NODE_ENV=production&&node index.js"
}
Bạn có thể dùng
npm run env NODE_ENV=production
Đây có lẽ là cách tốt nhất để làm điều đó, bởi vì nó tương thích trên cả Windows và Unix.
Từ tài liệu kịch bản chạy npm :
Kịch bản env là một lệnh tích hợp đặc biệt có thể được sử dụng để liệt kê các biến môi trường sẽ có sẵn cho tập lệnh khi chạy. Nếu một lệnh "env" được xác định trong gói của bạn, nó sẽ được ưu tiên hơn so với tích hợp sẵn.
npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'
Điều --
này là bắt buộc . Thay thế node -e 'console.log(process.env.NODE_ENV)'
bằng bất cứ lệnh nào bạn muốn.
npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.js
và ... không có gì xảy ra. Tôi không chắc phương pháp này hoạt động trên windows.
Nếu bạn đang sử dụng Visual Studio với NTVS, bạn có thể đặt các biến môi trường trên trang thuộc tính dự án:
Như bạn có thể thấy, danh sách thả xuống Cấu hình và Nền tảng bị vô hiệu hóa (Tôi đã không nhìn quá xa vào lý do tại sao), nhưng nếu bạn chỉnh sửa .njsproj
tệp của mình như sau:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DebugSymbols>true</DebugSymbols>
<Environment>NODE_ENV=development</Environment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DebugSymbols>true</DebugSymbols>
<Environment>NODE_ENV=production</Environment>
</PropertyGroup>
Việc thả xuống 'Gỡ lỗi / Phát hành' sau đó sẽ kiểm soát cách đặt biến trước khi bắt đầu Node.js.
Tôi đã viết một mô-đun win-node-env mà bạn có thể chạy lệnh của mình giống như bạn làm trong * nix.
NODE_ENV=production node myapp/app.js
Nó hoạt động bằng cách tạo một NODE_ENV.cmd
biến đặt NODE_ENV
môi trường và sinh ra một tiến trình con với phần còn lại của lệnh và các đối số của nó.
Chỉ cần cài đặt nó (trên toàn cầu) và chạy các lệnh script npm của bạn, nó sẽ tự động làm cho chúng hoạt động.
npm install -g win-node-env
Trải nghiệm của tôi khi sử dụng Node.js trên Windows 7 64-bit trong Visual Studio 2013 là bạn cần sử dụng
setx NODE_ENV development
từ một cửa sổ cmd. VÀ bạn phải khởi động lại Visual Studio để nhận ra giá trị mới.
Cú pháp thiết lập chỉ tồn tại trong khoảng thời gian của cửa sổ cmd mà nó được đặt.
Thử nghiệm đơn giản trong Node.js:
console.log('process.env.NODE_ENV = ' + process.env.NODE_ENV);
Nó trả về 'không xác định' khi sử dụng set và nó sẽ trả về 'phát triển' nếu sử dụng setx và khởi động lại Visual Studio.
cmd
- không phải quyền hạn? Ugh, đến trên cửa sổ, tập hợp lại.
Đây là phương pháp dòng lệnh:
Trong Windows 7 hoặc 10, nhập môi trường vào hộp tìm kiếm menu bắt đầu và chọn Chỉnh sửa các biến môi trường hệ thống.
Hoặc, điều hướng đến Bảng điều khiển \ Hệ thống và Bảo mật \ Hệ thống và nhấp vào Cài đặt hệ thống nâng cao
Điều này sẽ mở hộp thoại Thuộc tính hệ thống với tab Nâng cao được chọn. Ở phía dưới, bạn sẽ thấy nút Biến môi trường .... Ấn vào đây.
Hộp thoại Biến môi trường sẽ mở.
Ở phía dưới, bên dưới các biến hệ thống, chọn Mới ... Điều này sẽ mở hộp thoại Biến hệ thống mới.
Nhập tên và giá trị của biến và nhấp vào OK.
Bạn sẽ cần phải đóng tất cả các lời nhắc cmd và khởi động lại máy chủ của bạn để biến mới có sẵn cho process.env. Nếu nó vẫn không hiển thị, hãy khởi động lại máy của bạn.
Chỉ cần làm rõ, và cho bất cứ ai khác có thể nhổ tóc của họ ...
Nếu bạn đang sử dụng git bash trên Windows , set node_env=production&& node whatever.js
dường như không hoạt động . Thay vào đó, sử dụng cmd bản địa. Sau đó, sử dụng set node_env=production&& node whatever.js
các công trình như mong đợi.
Trường hợp sử dụng của tôi:
Tôi phát triển trên Windows vì quy trình làm việc của tôi nhanh hơn rất nhiều , nhưng tôi cần đảm bảo rằng phần mềm trung gian dành riêng cho phát triển ứng dụng của tôi không bị bắn trong môi trường sản xuất.
Để chạy ứng dụng của bạn trong PowerShell (vì &&
không được phép):
($env:NODE_ENV="production") -and (node myapp/app.js)
Lưu ý rằng đầu ra văn bản của những gì máy chủ đang làm bị chặn và tôi không chắc liệu nó có thể sửa được không. (Mở rộng câu trả lời của @ jsalonen.)
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
Đối với nhiều biến môi trường, một .env
tệp thuận tiện hơn:
# .env.example, committed to repo
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
# .env, private, .gitignore it
DB_HOST=real-hostname.example.com
DB_USER=real-user-name
DB_PASS=REAL_PASSWORD
Thật dễ dàng để sử dụng với dotenv-safe
:
npm install --save dotenv-safe
.index.js
) và trực tiếp sử dụng nó với process.env
lệnh :require('dotenv').load()
console.log(process.env.DB_HOST)
Đừng quên bỏ qua .env
tệp trong VCS của bạn .
Chương trình của bạn sau đó thất bại nhanh nếu một biến "được xác định" trong .env.example
không được đặt là biến môi trường hoặc trong .env
.
Trong trường hợp bạn đang sử dụng thiết bị đầu cuối GITBASH
"set NODE_ENV=production"
sẽ không hoạt động, bạn có thể làm gì là gõ "exportNODE_ENV=production"
điều này sẽ không đặt một biến nhưng nó hữu ích trong nhiều trường hợp. Tôi sẽ không khuyên bạn nên sử dụng điều này cho sản xuất, nhưng sẽ ổn thôi nếu bạn chơi xung quanh với npm.
npm install --production
Tôi đã sử dụng tập lệnh npm để chạy tác vụ gulp mà không có "&&"
NODE_ENV = testcase npm chạy seed-db
Khởi động lại mã VS nếu NODE_ENV hoặc bất kỳ biến môi trường nào khác không cung cấp giá trị chính xác. Điều này sẽ làm việc sau khi khởi động lại.