বাবেল 6.x এ () ডিফল্ট রফতানীর মান প্রয়োজন হয় না


88

ব্যাবেল 5.x এ, আমি নিম্নলিখিত কোডটি লিখতে পারি:

app.js

export default function (){}

index.js

require('babel/register');
require('./app')();

তারপরে, আমি node index.jsকোনও ত্রুটি ছাড়াই চালাতে পারি । তবে, বাবেল 6.x ব্যবহার করে নিম্নলিখিত কোডটি চালাচ্ছেন

index.es6.js

require('babel-core/register');
require('./app')();

একটি ত্রুটি ফলাফল

প্রয়োজনীয় (...) কোনও ফাংশন নয়

আমি জানতে চাই কেন?


তোমার কি আছে .babelrc? আপনি কোথাও বাবেল বিকল্পগুলি উল্লেখ করছেন? আমি জিজ্ঞাসা করছি কারণ বাবেল 6 ডিফল্টরূপে কোনও কিছুই স্থানান্তরিত করে না এবং আপনি যে es2015পোস্ট কোডটি দিয়েছেন সেটিতে আপনি প্রিসেটটি নির্দিষ্ট করে দিচ্ছেন না ।
— ইগোর রাউশ

@ ইগোরআউশ আমার কাছে সত্যিই একটি আছে .babelrc, অন্যদের এসআইপি স্ক্রিপ্টটি স্বাভাবিকভাবে চলছে
— এক্সজিহাইভেন

ট্যাগ বিবরণ পড়ুন। বলা নামের সাথে পাইথন লাইব্রেরিরbabel প্রশ্নের জন্য ।
— ফেলিক্স ক্লিং

কেবল কোনও ফাংশন রফতানি করবেন না app.js, তবে এখনই চালান
— বার্গি

@ ফেলিক্সকলিং দুঃখিত, পাইথনেও আমি একই নামটি জানি না ...
— এক্সজিহেইন

উত্তর:


157

টিএল; ডিআর

আপনি ব্যবহার করতে হবে

require('./app').default();

ব্যাখ্যা

বাবেল 5 এর জন্য একটি সামঞ্জস্য হ্যাক export defaultথাকত: যদি মডিউলটিতে কেবল একটি রফতানি থাকে এবং এটি একটি ডিফল্ট রফতানি হয় তবে এটি নির্ধারিত হয়েছিল module.exports। সুতরাং, উদাহরণস্বরূপ, আপনার মডিউল app.js

export default function () {}

এটি স্থানান্তরিত হবে

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});

exports["default"] = function () {};

module.exports = exports["default"];

এটি সম্পূর্ণরূপেrequire -ing ব্যাবেল-ট্রান্সপ্লাইড মডিউলগুলির সাথে সামঞ্জস্য করার জন্য করা হয়েছিল (যেমন আপনি করছেন)। এটিও বেমানান ছিল; যদি কোনও মডিউলে নামযুক্ত এবং ডিফল্ট উভয় রফতানি থাকে তবে এটি- requireডি করা যাবে না ।

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

import something from './app';

এই হিসাবে একই

import { default as something } from './app';

বলা হচ্ছে যে, ব্যাবিল 6 মডিউলগুলি স্থানান্তর করার সময় আন্তঃব্যবহারযোগ্যতা হ্যাক ছাড়ার সিদ্ধান্ত নিয়েছে appears এখন, আপনার মডিউল অ্যাপ্লিকেশন। Js হিসাবে স্থানান্তরিত হয়

'use strict';

Object.defineProperty(exports, "__esModule", {
    value: true
});

exports.default = function () {};

আপনি যেমন দেখতে পাচ্ছেন, তেমন কোনও অ্যাসাইনমেন্ট নেই module.exports। করার requireএই মডিউল, আপনাকে যা করতে হবে

require('./app').default();

19
আমার জন্য require('./app').default;কাজ। default()ফিরে এসেছেনundefined
— থিংলিনাক্স

14
@ থিংক্লিনাক্স, require(...).defaultরফতানি কার্যের একটি রেফারেন্স দেয়। default()এটি কল। যদি আপনার ফাংশনটি কোনও কিছু না ফেরায় (বা খালি থাকে), তবে অবশ্যই ফলাফল হবে undefined।
— ইগর রউশ

10
require('path').default()কাজ করে না, require('path').defaultআমার জন্য কাজ করে
— 3:47

4
আপনি require('./app').default;যদি কোনও ফাংশনের পরিবর্তে কোনও বিষয় রফতানি করেন তবে আপনার ব্যবহার করা উচিত ।
— টোকেনিয়াট

7

ঠিক উপরের সঠিক উত্তরটি অনুসরণ করতে।

আপনি যদি ডিফল্ট রফতানি আচরণ ব্যবহার করতে চান babel@5, আপনি ব্যাবেল-প্লাগ-ইন-মডিউল-এক্সপোর্ট প্লাগইন চেষ্টা করতে পারেন ।

এটা আমার জন্য বেশ ভাল কাজ করছে।


3

যদি এটি কাজ না করে

require('./app').default()

ব্যবহার

require('./app').default

শেষে ফাংশন কল ছাড়া।


যেমনটি ইগোর উপরের মন্তব্যে বলেছেন ( স্ট্যাকওভারফ্লো.com / প্রশ্নস / 70৩০47৪৪৪/২ ) আপনার উদাহরণগুলির প্রথমটি ফাংশনটি কল করবে যেখানে দ্বিতীয়টি একটি রেফারেন্স দেবে
— স্টেফানো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.