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




2 Answers

पुराने export व्यवहार को वापस पाने के लिए आप इस प्लगइन का भी उपयोग कर सकते हैं।

इससे पहले, 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 मॉड्यूल, बैबेल, आँसू, और एक समाधान को अपग्रेड करना




लाइब्रेरी लेखकों के लिए आप इस समस्या के आसपास काम करने में सक्षम हो सकते हैं।

मेरे पास आमतौर पर एक एंट्री पॉइंट होता है, index.js , जो फ़ाइल मैं package.json में मुख्य फ़ील्ड से इंगित करता हूं। यह lib के वास्तविक प्रवेश बिंदु को फिर से निर्यात करने के अलावा कुछ भी नहीं करता है:

export { default } from "./components/MyComponent";

बेबेल मुद्दे को हल करने के लिए, मैंने इसे एक import कथन में बदल दिया और फिर module.exports को module.exports कर दिया। module.exports :

import MyComponent from "./components/MyComponent";
module.exports = MyComponent;

मेरी सभी अन्य फाइलें शुद्ध ईएस 6 मॉड्यूल के रूप में नहीं रहती हैं, बिना कामकाज के। तो केवल प्रवेश बिंदु थोड़ा बदलाव की जरूरत है :)

यह आमज की आवश्यकता के लिए काम करेगा, और ईएस 6 आयात के लिए भी क्योंकि बेबेल रिवर्स इंटरऑप (कॉमनज -> ईएस 6) को गिरा नहीं देता है। बेबेल आमंज को पैच करने के लिए निम्न फ़ंक्शन इंजेक्ट करता है:

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 

मैंने इसे लड़ने में घंटों बिताए हैं, इसलिए मुझे उम्मीद है कि यह किसी और को बचाएगा!




Related

ecmascript-6 commonjs babeljs