বাবেল 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.