ES6 + जावास्क्रिप्ट मॉड्यूल निर्यात विकल्प


82

मैंने निम्नलिखित दोनों तरीकों से किए गए ES6 मॉड्यूल का सार्वजनिक निर्यात देखा है:

// method 1
export var getAnswer = function () { return 'forty two'; };

// method 2
export default function () { return 'forty two'; };
  1. क्या ये दोनों वैध हैं?
  2. यदि हां, तो वे दोनों क्यों मौजूद हैं?
  3. ईएस 6 सिंटैक्स का उपयोग करके मॉड्यूल निर्यात के लिए अन्य वैध विकल्प हैं?

मुझे आश्चर्य है कि मैं अपने googlefu के साथ जवाब खोजने में सक्षम नहीं है। मेरा सवाल है केवल ES6 मॉड्यूल, के साथ नहीं CommonJS, RequireJS, एएमडी, नोड, आदि


2
मुझे लगता है कि फर्क है import x from yबनामimport {x} from y
elclanrs

जवाबों:


180

एक साल और कुछ बाद में, इस विषय पर मुझे सबसे अच्छी जानकारी मिली है।

निर्यात 4 प्रकार के होते हैं। यहां कुछ आयातों के साथ उपयोग करने वाले प्रत्येक के उदाहरण दिए गए हैं:

निर्यात सिंटैक्स

// default exports
export default 42;
export default {};
export default [];
export default (1 + 2);
export default foo;
export default function () {}
export default class {}
export default function foo () {}
export default class foo {}

// variables exports
export var foo = 1;
export var foo = function () {};
export var bar;
export let foo = 2;
export let bar;
export const foo = 3;
export function foo () {}
export class foo {}

// named exports
export {};
export {foo};
export {foo, bar};
export {foo as bar};
export {foo as default};
export {foo as default, bar};

// exports from
export * from "foo";
export {} from "foo";
export {foo} from "foo";
export {foo, bar} from "foo";
export {foo as bar} from "foo";
export {foo as default} from "foo";
export {foo as default, bar} from "foo";
export {default} from "foo";
export {default as foo} from "foo";

आयात सिंटैक्स

// default imports
import foo from "foo";
import {default as foo} from "foo";

// named imports
import {} from "foo";
import {bar} from "foo";
import {bar, baz} from "foo";
import {bar as baz} from "foo";
import {bar as baz, xyz} from "foo";

// glob imports
import * as foo from "foo";

// mixing imports
import foo, {baz as xyz} from "foo";
import foo, * as bar from "foo";

// just import
import "foo";

स्रोत।


9
महान सूची, लेकिन क्या आप इस पर विस्तार कर सकते हैं कि प्रत्येक प्रकार क्या करता है, और अंतर क्या हैं?
डेन डैस्कलेस्कु

2
यह एक उत्कृष्ट विचार है। मैं प्रत्येक स्पष्टीकरण के साथ व्यापक होना चाहता हूं, लेकिन मैंने थोड़ी देर में ईएस 6 को नहीं छुआ है इसलिए मैं थोड़ा कठोर हूं। जब तक मैं ES6 के बारे में बात नहीं कर सकता, तब तक इंतजार करना पड़ेगा।
kdbanman

आप सबसे अच्छा कर रहे हैं
Zok

40

ये दोनों ही मान्य हैं।

विधि 1 नामित निर्यात प्रदान करता है । यहां कुंजी यह है कि आप एक से अधिक चीजों का निर्यात कर सकते हैं। इसका उपयोग कई गुणों वाली वस्तु को निर्यात करने के बजाय किया जाना चाहिए। जब आप नामित निर्यात के साथ एक मॉड्यूल आयात करते हैं, तो उपयोग करें import {a, b} from c

विधि 2 डिफ़ॉल्ट निर्यात प्रदान करता है । केवल एक डिफ़ॉल्ट निर्यात हो सकता है। यह मुख्य रूप से तब उपयोग किया जाता है जब आप किसी एक चीज का निर्यात कर रहे होते हैं, जैसे class, या एक ऐसा functionजिसे आप बिना किसी अतिरिक्त समर्थन के उपयोग करने की उम्मीद करते हैं। जब आप एक डिफ़ॉल्ट निर्यात के साथ एक मॉड्यूल आयात करते हैं, तो उपयोग करें import d from c

ध्यान दें कि आप दोनों का उपयोग कर सकते हैं! इसलिए यदि आपके पास कभी-कभार उपयोग किए जाने वाले सहायकों के साथ एक प्रमुख, प्राथमिक कार्य होता है, तो आप exportसहायक और export defaultप्राथमिक कर सकते हैं । जब आप एक मॉड्यूल आयात करते हैं और दोनों प्रकार के निर्यात की आवश्यकता होती है, तो उपयोग करें import d, {a, b} from c

एक अन्य विकल्प यह है कि आप अपने मॉड्यूल के अंत में उन्हें सूचीबद्ध करके नामित निर्यात प्राप्त कर सकते हैं, जैसे export {a,b,c}:। आप उनका नाम भी बदल सकते हैं export {a as $a, b as c}

मुझे यह सब इस लेख से मिला है , जो अप-टू-डेट es6 मॉड्यूल जानकारी के लिए सबसे अच्छा स्रोत है जिसे मैं ढूंढने में सक्षम हूं।


3
  1. क्या ये दोनों वैध हैं?

नहीं, export function () { return answer; };अमान्य है, या तो आप डिफ़ॉल्ट का उपयोग करते हैं, या आप उस फ़ंक्शन घोषणा में एक नाम जोड़ते हैं।

  1. यदि हां, तो वे दोनों क्यों मौजूद हैं?

वे :) नहीं

  1. ईएस 6 सिंटैक्स का उपयोग करके मॉड्यूल निर्यात के लिए अन्य वैध विकल्प हैं?

आप यहाँ बहुत सारे वैध विकल्प देख सकते हैं: https://github.com/eslint/espree/pull/43

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.