প্রক্রিয়া.এনভি.এনওড


168

আমি নোডজেজে একটি টিউটোরিয়াল অনুসরণ করার চেষ্টা করছি। আমি মনে করি না যে আমি কিছু মিস করেছি তবে যখনই আমি কল করি তখনই আমি process.env.NODE_ENVফিরে আসার মানটি সংজ্ঞায়িত করা হয়। আমার গবেষণা অনুসারে ডিফল্ট মানটি 'উন্নয়ন' হওয়া উচিত। এই মানটি কীভাবে গতিশীলভাবে সেট করা হয় এবং এটি প্রাথমিকভাবে কোথায় সেট করা হয়?


আপনি যে হিরকু অ্যাপ্লিকেশনগুলি ব্যবহার করতে পারেন তার জন্য NODE_ENV সেট করতে:heroku config:set NODE_ENV="production"
কনার

14
যদিও নীচের উত্তরগুলি পরিবেশের পরিবর্তনশীল স্থির করে অস্থায়ীভাবে সমস্যার সমাধান করবে, তবে এখানে আরও বড় পাঠটি হওয়া উচিত যে কোনও পরিবেশের চলক সেট করা হবে কিনা তা আপনি কখনই জানতে পারবেন না ... সুতরাং সেই অনুযায়ী আপনার কোডটি লিখুন এবং এটি সেট করা আছে কিনা তা পরীক্ষা করুন এবং যদি তাই হয়, কি. এটি সম্পর্কে অনুমান করবেন না।
স্টিজন ডি উইট

উত্তর:


193

প্রক্রিয়া.এনভি আপনার পরিবেশের একটি রেফারেন্স, সুতরাং আপনাকে সেখানে ভেরিয়েবল সেট করতে হবে।

উইন্ডোজে পরিবেশের পরিবর্তনশীল সেট করতে :

SET NODE_ENV=development

ওএস এক্স বা লিনাক্সে :

export NODE_ENV=development

4
আপনি যোগ করতে পারেন যে NODE_ENV সেট না করা থাকলে অ্যাপটি "বিকাশ" মোডের মতো আচরণ করে
রোকো

1
লিনাক্সের জন্য, vi ~ / .bash_profile, তারপরে NODE_ENV = বিকাশ এবং সংরক্ষণ করুন।
স্টোনিউ

6
অন্য যে কেউ লড়াই করতে চাইলে "SET V = VAL" এবং "SET V = VAL" এর মধ্যে পার্থক্য রয়েছে। স্পেসস ব্যাপার।
উইলিম

4
নোট করুন যে মডিউলটি "ক্রস-এনভিভি" উপরের মত একই কাজ করবে এবং এটি ওএসএক্স এবং উইন্ডোজ উভয় ক্ষেত্রেই কাজ করবে: "ক্রস-এনভিভি NODE_ENV = বিকাশ"। আপনাকে প্রথমে ক্রস-এনভিটি ইনস্টল করতে হবে: "এনপিএম ইনস্টল করুন ক্রস-এনভি - সেভ"। এটি আপনার প্যাকেজ.জসনের স্ক্রিপ্টে আছে এবং আপনি উভয় প্ল্যাটফর্মে যেতেই ভাল good
আন্তোনিও ব্র্যান্ডাও

6
আমার পক্ষে কাজ করেনি। আমি একই টার্মিনালটি থেকে কিছু করার export NODE_ENV=developmentআগে আমার ম্যাক টার্মিনালে চালিত হয়েছি react-native run-ios। ডিবাগ করার সময় এর মান process.env.NODE_ENVঅপরিজ্ঞাত হয়।
অ্যাশ

58

পরামর্শ

ইন package.json:

"scripts": {
  "start": "set NODE_ENV=dev && node app.js"
 }

ইন app.js:

console.log(process.env.NODE_ENV) // dev
console.log(process.env.NODE_ENV === 'dev') // false
console.log(process.env.NODE_ENV.length) // 4 (including a space at the end) 

সুতরাং, এটি আরও ভাল হতে পারে:

"start": "set NODE_ENV=dev&& node app.js"

অথবা

console.log(process.env.NODE_ENV.trim() === 'dev') // true

2
আপনি যা করতে পারেন তা হ'ল তাই আপনাকে ছাঁটাই করতে হবে না:"start": "set NODE_ENV=dev&& node app.js"
জেড খোলা

দুর্দান্ত পর্যবেক্ষণ, console.log(process.env.NODE_ENV.length) // 4 (শেষে একটি স্থান সহ)
গ্রেগন 3

1
এটি নিরাপদ: console.log(('' + process.env.NODE_ENV).trim() === 'dev') // trueযেমন প্রক্রিয়া.এনভি.এন.ডি.এন.ভি.এন.ভি . অপরিজ্ঞাত থাকলেও এটি ত্রুটি ছুঁড়ে ফেলবে না ।
গ্রেগন 3

52

* নিক্স (লিনাক্স, ওএস এক্স, ইত্যাদি) ব্যবহারকারী লোকদের জন্য দ্বিতীয় রফতানি কমান্ডের মাধ্যমে এটি করার কোনও কারণ নেই, আপনি এটি অনুরোধকারী কমান্ডের অংশ হিসাবে শৃঙ্খলা করতে পারেন:

NODE_ENV=development node server.js

সহজ, না? :)


3
ক্রস-এনভির মতো প্যাকেজ উইন্ডোতেও কাজ করতে দেয়।
ওয়াকাররানডোফস্মিথ

35

উইন্ডোজে নোড নিয়ে কাজ করার সময় আমরা এই সমস্যায় পড়েছিলাম।

এই ভেরিয়েবলগুলি সেট করতে অ্যাপ্লিকেশন চালানোর চেষ্টা করা যে কোনও ব্যক্তির প্রয়োজনের চেয়ে আমরা অ্যাপ্লিকেশনটির মধ্যে একটি ফ্যালব্যাক সরবরাহ করেছি।

var environment = process.env.NODE_ENV || 'development';

উত্পাদনের পরিবেশে আমরা এটি যথারীতি পদ্ধতি (এসইটি / এক্সপোর্ট) অনুযায়ী সংজ্ঞায়িত করব would


3
এটিই সবচেয়ে ব্যবহারিক সমাধান g
druskacik

12

আপনি ক্রস- env এনএমপি প্যাকেজটি ব্যবহার করতে পারেন । এটি পরিবেশের পরিবর্তনশীল ছাঁটাইয়ের যত্ন নেবে, এবং এটি বিভিন্ন প্ল্যাটফর্ম জুড়ে কাজ করে তাও নিশ্চিত করবে।

প্রকল্পের মূলটিতে, চালান:

npm install cross-env

তারপরে আপনার প্যাকেজ.জেসনে, স্ক্রিপ্টগুলির আওতায়, যুক্ত করুন:

"start": "cross-env NODE_ENV=dev node your-app-name.js"

তারপরে আপনার টার্মিনালে, প্রকল্পের মূলটিতে, চালিয়ে আপনার অ্যাপ্লিকেশনটি শুরু করুন:

npm start

এরপরে পরিবেশের পরিবর্তনশীল আপনার অ্যাপ্লিকেশান হিসাবে উপলভ্য হবে process.env.NODE_ENV, সুতরাং আপনি এর মতো কিছু করতে পারেন:

if (process.env.NODE_ENV === 'dev') {
  // Your dev-only logic goes here
}

আমি মনে করি না এটি কাজ করে। এটি আমার বর্তমান প্রকল্পে চেষ্টা করা হয়েছে এবং NODE_ENV এখনও অপরিজ্ঞাত। দেখে মনে হচ্ছে এটি কাজ করতে আরও কিছু কনফিগার প্রয়োজন।
আকাশ ঠাকুর

এনপিএম ইনস্টল - সেভ-ডেভ ক্রস-
এনভিভি

9

প্যাকেজ.জসনে আমাদের নীচের মত কনফিগার করতে হবে (লিনাক্স এবং ম্যাক ওএসে কাজ করে)

নীচে আপনার বিল্ড কমান্ডগুলির পরে গুরুত্বপূর্ণ জিনিসটি "রফতানি NODE_ENV = উত্পাদন" এর একটি উদাহরণ:

  "scripts": {
     "start": "export NODE_ENV=production && npm run build && npm run start-server",
     "dev": "export NODE_ENV=dev && npm run build && npm run start-server",
  } 
  • দেব পরিবেশের জন্য, আমাদের "এনপিএম রান ডেভ" কমান্ডটি চাপতে হবে

  • উত্পাদন পরিবেশের জন্য, আমাদের "এনপিএম রান স্টার্ট" কমান্ডটি চাপতে হবে


9

ইন MacOS তাদের জন্য যারা দ্রুতগামী সংস্করণ ব্যবহার করছেন 4.x.xএবং ব্যবহার DOTENVপ্লাগইন, ভালো ব্যবহার করা প্রয়োজন:

  1. প্লাগইন ইনস্টল করার পরে আপনি যে ফাইলটি প্রয়োগ করেন সেখানে নিম্নলিখিতগুলির মতো আমদানি করুন: require('dotenv').config({path: path.resolve(__dirname+'/.env')});

  2. রুট ডিরেক্টরিতে একটি ফাইল '.env' তৈরি করুন এবং ভেরিয়েবলের মতো যুক্ত করুন:

    NODE_ENV=development অথবা NODE_ENV = development



1

এটি ওএসের কারণে

আপনার প্যাকেজ.জেসনে আপনার স্ক্রিপ্টগুলি নিশ্চিত করুন (যেখানে অ্যাপ্লিকেশনগুলি কার্যকর করতে হবে আপনার মূল জেএস ফাইলটি অ্যাপ্লিকেশন j

"scripts": {
    "start": "node app.js",
    "dev": "nodemon server.js",
    "prod": "NODE_ENV=production & nodemon app.js"
  }

উইন্ডোজ জন্য

NODE_ENV = বিকাশযুক্ত আপনার .env ফাইল ভেরিয়েবলটিও সেট আপ করুন

যদি আপনার .env ফাইলটি উদাহরণস্বরূপ কোনও ফোল্ডারে থাকে তবে কনফিগ ফোল্ডারটি app.js (আপনার মূল জেএস ফাইল) এ নির্দিষ্ট করে রাখুন

কনস্ট ডটেনভ = প্রয়োজনীয় ('ডোটেনভ'); dotenv.config ({পথ: './config/config.env'});


0

যদি আপনি প্রতিক্রিয়াতে এই প্রোবটির মুখোমুখি হন তবে আপনার প্রতিক্রিয়া-স্ক্রিপ্টগুলি ০.০.২.৩ এবং এর চেয়ে বেশি এর প্রয়োজন। NODE_ENVপ্রতিক্রিয়ার কাজ করার চেয়ে অন্যান্য পরিবেশের ভেরিয়েবলগুলির ক্ষেত্রেও তাদের উপসর্গ করা দরকার REACT_APP_



-3

আপনি কোড দ্বারা এটি সেট করতে পারেন, উদাহরণস্বরূপ:

process.env.NODE_ENV = 'test';


67
আমি দৃ application়ভাবে অ্যাপ্লিকেশন যুক্তিতে পরিবেশ শনাক্তকারীকে পরিবর্তন করতে কাউকে নিরুৎসাহিত করি। আপনি কখনই চাইবেন না যে অ্যাপ্লিকেশনটি হঠাৎ এটি অন্যরকম কিছু হওয়ার চেয়ে ভাবুক really এটি কেবলমাত্র সিস্টেম-স্তরে পরিবর্তন করা উচিত, যেমন অন্যান্য উত্তরগুলির অনেকের পরামর্শ।
কাফোসো

7
আপনি প্রায় 12 টি ফ্যাক্টর অ্যাপ্লিকেশন পড়তে চাইতে পারেন: 12factor.net/config । এই কোডটি লঙ্ঘন হবে। আপনার কোড থেকে আপনার কনফিগারেশন আলাদা রাখার ভাল কারণ রয়েছে।
jcollum

1
এটি কেবল স্বয়ংক্রিয় পরীক্ষার জন্য কার্যকর হতে পারে তবে তবুও এটি সরাসরি এনভির থেকে পড়ার পরিবর্তে আপনার মূল কোডটিতে বিমূর্ত এবং ইনজেকশনের ব্যবস্থা করা যেতে পারে।
অ্যাঞ্জেলস পিকলাস

আসুন এই উত্তরটিকে এতটা নিম্নে না নামিয়ে দিন যে @ কাফোসোর তথ্যমূলক মন্তব্য হ্রাস পায়। অথবা কিছু ভাল ভোট দেওয়া উত্তরে এই তথ্য যুক্ত করুন।
বিভোর দুবে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.