উত্পাদনে বাবেল-নোড ব্যবহার করা কি ঠিক আছে?


87

আমি ইএস 6 সিনট্যাক্স সমর্থন করতে বাবেল-নোড ব্যবহার করে এবং বেবেলিফ ট্রান্সফর্মের সাথে ব্রাউজ করে একটি সাইট বিকাশ করছি।

আমি কেবল ভাবছি, নোডে ES6 চালানোর জন্য আমার কাছে অন্য কোন বিকল্পের babel-node server চেয়ে আমি প্রযোজনায় node server এটি চালাতে পারি?

বিকাশের জন্য আমি যে কমান্ডগুলি চালিয়ে যাচ্ছি সেগুলি এখানে

// npm run build
browserify -t [babelify] client.js > public/js/bundle.js",

// npm start
babel-node server.js"

এখানে আমার দেব নির্ভরতা

"babel": "^4.0.1",
"babelify": "^5.0.3",
"browserify": "^8.0.3"

উত্তর:


116

ক্লায়েন্ট সাইড কোডের জন্য , আপনি সঠিক জিনিসটি করছেন। babelifyএটি এবং এটি ক্লায়েন্টের কাছে প্রেরণ করুন।


সার্ভার সাইড কোডের জন্য , আমি কেবল ব্যাবেল-ক্লাইম ব্যবহার করে একটি নিয়মিত বিল্ড করব

মতে http://babeljs.io/docs/setup/#babel_register , babel-registerহয় কর্মক্ষেত্রে ব্যবহারযোগ্য বোঝানো হয় না - প্রয়োজন হুক প্রাথমিকভাবে সহজ ক্ষেত্রে জন্য বাঞ্ছনীয়।

বাবেল 6+ এর জন্য

বাবেল 6 হিসাবে, কোনও রূপান্তরগুলি ডিফল্টরূপে অন্তর্ভুক্ত করা হয় না। সুতরাং আসুন babel-cliএবং ইনস্টল দ্বারা শুরু করা যাক babel-preset-es2015

$ npm install --save-dev babel-cli babel-preset-es2015

আপনার .babelrcফাইলে একটি রূপান্তর যুক্ত করুন - এটি আমরা উপরে ডাউনলোড করা প্রসেট মডিউল। কোনটি (গুলি) আপনার জন্য সেরা উপযুক্ত তা দেখতে প্রিসেটগুলির সম্পূর্ণ তালিকাটি একবার দেখুন ।

{
  "presets": ["es2015"]
}

buildআপনার একটি স্ক্রিপ্ট যোগ করুন package.json। নীচে srcআপনার ইনপুট ফাইলগুলি এবং buildরূপান্তরিত আউটপুট ফাইলগুলি রয়েছে

"scripts": {
  "build": "babel src -d build"
}

তাহলে এটি নির্মাণ!

$ npm run build

তারপরে আপনার কোডটি চালান। এই মুহুর্তে, আপনি আপনার buildডিরেক্টরিতে ফাইলগুলি কার্যকর করতে চাইবেন

$ npm start

বাবেলের জন্য <= 5, কেবল প্রয়োজনীয় হুক ব্যবহার করুন।

require("babel/register");

এক্সটেনশনগুলি .es6 , .es , .jsx এবং .js সহ নোড দ্বারা প্রয়োজনীয় সমস্ত পরবর্তী ফাইলগুলি বাবেল দ্বারা রূপান্তরিত হবে। Polyfill স্বয়ংক্রিয়ভাবে প্রয়োজন।

আপনি আপনার উত্স ফাইলগুলি ES6 এ রাখতে সক্ষম হবেন তবুও এটি ব্যবহার করে কার্যকর করুন node server.js


আপনার মন্তব্য অনুসারে, আপনার মনে হচ্ছে কিছুটা সমস্যা হচ্ছে। উপরের হলুদ হাইলাইট করা অংশটিতে বিশেষ মনোযোগ দিন। আপনার প্রথম ফাইলটি কেবল ES5 হতে পারে যা নোড দ্বারা চালিত হয়। পরবর্তী সমস্ত প্রয়োজনীয়তা বাবেল দ্বারা রূপান্তরিত হবে ...

একটি সাধারণ সেটআপ দেখতে কেমন হতে পারে তা এখানে

server.js

// only ES5 is allowed in this file
require("babel/register");

// other babel configuration, if necessary

// load your app
var app = require("./app.js");

app.js

// this file will be loaded through babel
// you can now use ES6 here and in every other include

ঘম্ম!

$ node server.js

9
আসলে আমি এটি চেষ্টা করেছি, require("babel/register");আমার সার্ভার.জেজে রেখেছি এবং আমি যখন চালনা node server.jsকরি তখন ত্রুটিটি পাই: Unexpected reserved word: import ... তাই এটি কাজ করে বলে মনে হয় নি
svnm

4
@ স্টিভেনিসেকি আমার আপডেটে কীভাবে জিনিস আপ এবং চলমান তা প্রদর্শন করা উচিত।
আপনাকে

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

উদাহরণস্বরূপ যে প্রকল্পটি এখন নোড সার্ভার.জেএসএস :) এর সাথে এই ফ্যাশনে কাজ করে তা যদি কেউ উদাহরণটি দেখতে আগ্রহী হয় তবে তা এখানে । এটি প্রতিক্রিয়া রাউটার, ব্যাবেল এবং ওএলটি ব্যবহার করে একটি উদাহরণ, যা আমি বাস্তব সাইটের জন্য ব্যবহার করব।
এসএনএনএম

4
এরই মধ্যে এটি পরিবর্তন করে ("বাবেল-রেজিস্টার") করা হয়েছে; .. যাইহোক আমি "অপ্রত্যাশিত টোকেন আমদানি"
পেয়েছি

54

আমি এই বিষয়ে একটি ব্লগ পোস্ট লিখেছি

বাবেলজ সিএলআই ডকুমেন্টেশন নিম্নলিখিত সাবধানবাণী :

বাবেল-নোড উত্পাদন ব্যবহারের জন্য বোঝানো হয় না

আপনি উত্পাদন বাবেল নোড ব্যবহার করা উচিত নয়। এটি অযথা ভারী, উচ্চ মেমরির ব্যবহারের কারণে ক্যাশে মেমরিতে সঞ্চিত রয়েছে। আপনি সর্বদা একটি স্টার্টআপ পারফরম্যান্স পেনাল্টির অভিজ্ঞতা পাবেন কারণ পুরো অ্যাপটিকে ফ্লাইতে সংকলন করা দরকার।

এটি আপনার বাবেল নোডের পরিবর্তে নোডের সাহায্যে এনপিএম স্ক্রিপ্টগুলি সেট আপ করতে পারে তার একটি উদাহরণ।

"scripts": {
  "clean": "rm -rf build && mkdir build",
  "build-css": "node-sass scss/app.scss public/css/app.css",
  "build-server": "babel -d ./build ./server -s",
  "build": "npm run clean && npm run build-css && npm run build-server",
  "lint": "eslint source/ --quiet",
  "start": "node ./build/index.js",
  "debug": "node --debug ./build/index.js",
  "test": "for i in $(ls tests/); do babel-node \"./tests/${i}\" | faucet ; done",
  "validate": "npm run lint; npm run test && npm outdated --depth 0"
},

আপনি ব্লগ পোস্টে আরও বিশদ জানতে পারেন


4
নোড 4.0.০ ইএস support সমর্থন করে, কোডটি সংকলনের জন্য আমাদের কী এখনও বাবেল ব্যবহার করা দরকার?
lvarayut

8
@ এলভারাউত হ্যাঁ, বৈশিষ্ট্যগুলির উপর নির্ভর করে, বাবিলের এখনও সার্ভার সাইড প্রয়োজন। নোড ভি 4.0.0 সমস্ত ইএস 6 বৈশিষ্ট্যগুলি সমর্থন করে না (বিশেষত আমদানি / রফতানি সিনট্যাক্সের মাধ্যমে মডিউলগুলি)। এই বিষয়ে আরও তথ্যের জন্য nodejs.org/en/docs/es6 দেখুন , বা নোড --v8- বিকল্পগুলি টাইপ করুন | টার্মিনালে গ্রেপ "প্রগতিতে" এখনও প্রয়োগ হয়নি ES6 বৈশিষ্ট্যগুলির তালিকা পেতে।
jbmusso

@jbmusso আপনার দুর্দান্ত ব্যাখ্যার জন্য ধন্যবাদ :)
lvarayut

14
বাবেল কেবল ES6 এর জন্য নয়, ESNext এর জন্যও .. সুতরাং এটি ধারাবাহিকভাবে ES7 থেকে বৈশিষ্ট্যগুলি যুক্ত করে এবং যত তাড়াতাড়ি তারা টিসি 39 স্পেসে স্থির হয়।
কুয়েড্রামন

15

উত্পাদনে ব্যাবেল-নোড ব্যবহারের পক্ষে ও বিবেকের পক্ষে এটি গুরুত্বপূর্ণ important

  • babel-nodeপণ্য হার্ডওয়্যারে স্টার্টআপ ব্যয়ে অর্ধেক থেকে এক সেকেন্ডের মধ্যে যোগ করে। তবে যদি আপনার অ্যাপ্লিকেশনটি একটি দীর্ঘ-চলমান সার্ভার হয় তবে সেই প্রারম্ভকালীন ব্যয়টি খুব বেশি গুরুত্ব পাবে না।
  • অতিরিক্ত মেমরির খরচ মাপার চেষ্টা করুন। উদাহরণস্বরূপ আমার অ্যাপ্লিকেশনটির জন্য (সময় সিরিজের ডেটা পড়া এবং প্রক্রিয়াকরণ করা), এটি ছিল মাত্র 20MB। আপনার পরিস্থিতির উপর নির্ভর করে, এটি তাত্পর্যপূর্ণ বা নাও হতে পারে।

অন্য দিকে,

  • ব্যাবেল-নোড ব্যবহার করে সরাসরি উন্নয়ন সহজ হয় - আপনার "বিল্ড" স্ক্রিপ্টগুলির প্রয়োজন হবে না এবং আপনার পৃথক src/ libএবং distডিরেক্টরি থাকবে না
  • আপনি যদি importস্থানীয় ফাইলগুলি থেকে থাকেন তবে আপনি কি থেকে আমদানি করবেন src/myutils, বা থেকে lib/myutils? ব্যবহারের babel-nodeফলে সমস্যাটি দূর হয়।

আমি কেবলমাত্র মডিউল সমর্থনের জন্য ব্যাবেল ব্যবহার করি। এখন V8 সবেমাত্র 10 জানুয়ারী, 2017 এ মডিউলগুলির জন্য সমর্থন প্রকাশ করেছে Hope


8

@ কুআড্রামানের উত্তর @ নোমিকের চেয়ে আরও সঠিক।

আপনার প্রশ্নের সংক্ষিপ্ত উত্তর দেওয়ার জন্য: না, babel-nodeআপনার দ্বারা স্পষ্টভাবে অনুরোধ করা উচিত নয়। babel-nodeএটি একটি ব্যক্তিগত গ্রন্থাগার যা গ্রাস করে babel-cli

অফিসিয়াল টিউটোরিয়ালটিতে আপনাকে নোডে উঠতে এবং চলতে হবে এমন সমস্ত কিছু রয়েছে (ব্রাউজারের দিকের নয়!): Https://github.com/babel/example-node-server । এটি পড়ুন! আমি এতগুলি বিভ্রান্তিমূলক ব্লগ টিউটোরিয়াল পেয়েছি যা বিভিন্ন উপায়ে ব্যবহার করা হয়েছিল এবং এই নিবন্ধটি অনুসরণ করা সবচেয়ে সহজ খুঁজে পেয়েছি।

বোনাস: বহু লোক যা ভাবেন তার বিপরীতে, ট্রান্সপ্লিং ম্যাজিকের সমস্ত স্থানীয়ভাবে (ব্যবহার করে npm install --save-dev babel-cli nodemon babel-preset-es2015 babel-preset-stage-2) ইনস্টল করা যেতে পারে । বাবেল বা এর কোনও সহায়ক মডিউল বিশ্বব্যাপী ইনস্টল করার দরকার নেই! বেশ নিফটি।

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