[ecmascript-6] बेबेल 6 बदलता है कि यह डिफ़ॉल्ट निर्यात कैसे करता है


Answers

यदि आप कॉमनजेएस निर्यात व्यवहार चाहते हैं, तो आपको सीधे सामान्यजेएस का उपयोग करना होगा (या अन्य उत्तर में प्लगइन का उपयोग करना होगा)। इस व्यवहार को हटा दिया गया क्योंकि यह भ्रम पैदा करता है और अमान्य ES6 अर्थशास्त्र का कारण बनता है, जिसे कुछ लोगों ने उदाहरण पर भरोसा किया था

export default {
  a: 'foo'
};

और फिर

import {a} from './foo';

जो अवैध ES6 है लेकिन कॉमनजेएस इंटरऑपरेबिलिटी व्यवहार के कारण काम करता है जिसका आप वर्णन कर रहे हैं। दुर्भाग्यवश दोनों मामलों का समर्थन करना संभव नहीं है, और लोगों को अमान्य ES6 लिखने की इजाजत देने से आपको एक बुरा मुद्दा है .default

दूसरा मुद्दा यह था कि उपयोगकर्ताओं के लिए यह अप्रत्याशित था अगर उन्होंने भविष्य में नामित निर्यात जोड़ा, उदाहरण के लिए

export default 4;

फिर

require('./mod');
// 4

परंतु

export default 4;
export var foo = 5;

फिर

require('./mod')
// {'default': 4, foo: 5}
Question

इससे पहले, module.exports = exports["default"] लाइन module.exports = exports["default"] जोड़ देगा। module.exports = exports["default"] । यह अब यह नहीं करता है। इसका मतलब यह है कि मैं ऐसा कर सकता हूं:

var foo = require('./foo');
// use foo

अब मुझे यह करना है:

var foo = require('./foo').default;
// use foo

कोई बड़ा सौदा नहीं है (और मैं अनुमान लगा रहा हूं कि यह सब कुछ होना चाहिए था)। मुद्दा यह है कि मेरे पास बहुत सारे कोड हैं जो काम करने के लिए उपयोग की जाने वाली चीज़ों पर निर्भर करते हैं (मैं इसे अधिकांश ईएस 6 आयात में परिवर्तित कर सकता हूं, लेकिन यह सब नहीं)। क्या कोई मुझे मेरी परियोजना के माध्यम से पुराने तरीके से काम करने के तरीके के बारे में सुझाव दे सकता है और इसे ठीक कर सकता है (या ऐसा करने के लिए कोडोडोड लिखने के बारे में कुछ निर्देश भी बहुत चिकना होगा)।

धन्यवाद!

उदाहरण:

इनपुट:

const foo = {}
export default foo

बेबेल 5 के साथ आउटपुट

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
var foo = {};
exports["default"] = foo;
module.exports = exports["default"];

बेबेल 6 (और es2015 प्लगइन) के साथ आउटपुट:

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
var foo = {};
exports["default"] = foo;

ध्यान दें कि आउटपुट में एकमात्र अंतर module.exports = exports["default"]

संपादित करें

मुझे इस ब्लॉगपॉस्ट में दिलचस्पी हो सकती है जो मैंने अपने विशिष्ट मुद्दे को हल करने के बाद लिखा था: गलतफहमी ES6 मॉड्यूल, बैबेल, आँसू, और एक समाधान को अपग्रेड करना




मेरे पास इस तरह का मुद्दा है। और यह मेरा समाधान है:

//src/arithmetic.js

export var operations = {
  add: function (a, b) {
      return a + b;
  },

  subtract: function (a, b) {
      return a - b;
  }
};

//src/main.js

import { operations }  from './arithmetic';

let result = operations.add(1, 1);

console.log(result);





Related