javascript निर्देशिका में फ़ाइलों से आयात मॉड्यूल




ecmascript-6 es6-module-loader (5)

मैंने उन्हें कुछ बार उपयोग किया है (विशेष रूप से कई फाइलों (जैसे एएसटी नोड्स) पर डेटा को विभाजित करने वाली विशाल वस्तुओं के निर्माण के लिए), उन्हें बनाने के लिए मैंने एक छोटी सी लिपि बनाई है (जिसे मैंने अभी एनपीएम में जोड़ा है, इसलिए हर कोई इसका उपयोग कर सकते हैं)।

उपयोग (वर्तमान में आपको निर्यात फ़ाइल का उपयोग करने के लिए बेबेल का उपयोग करने की आवश्यकता होगी):

$ npm install -g folder-module
$ folder-module my-cool-module/

एक फ़ाइल उत्पन्न करता है जिसमें:

export {default as foo} from "./module/foo.js"
export {default as default} from "./module/default.js"
export {default as bar} from "./module/bar.js"
...etc

फिर आप फ़ाइल का उपभोग कर सकते हैं:

import * as myCoolModule from "my-cool-module.js"
myCoolModule.foo()

Es6 के साथ, मैं इस तरह की फाइल से कई निर्यात आयात कर सकता हूं:

import {ThingA, ThingB, ThingC} from 'lib/things';

हालांकि, मुझे प्रति फ़ाइल एक मॉड्यूल रखने का संगठन पसंद है। मैं इस तरह के आयात के साथ खत्म होता है:

import ThingA from 'lib/things/ThingA';
import ThingB from 'lib/things/ThingB';
import ThingC from 'lib/things/ThingC';

मुझे ऐसा करने में सक्षम होना अच्छा लगेगा:

import {ThingA, ThingB, ThingC} from 'lib/things/*';

या कुछ समान, समझने वाले सम्मेलन के साथ कि प्रत्येक फ़ाइल में एक डिफ़ॉल्ट निर्यात होता है, और प्रत्येक मॉड्यूल को इसकी फ़ाइल के समान नाम दिया जाता है।

क्या यह संभव है?


उत्तर में पहले से प्रदान की गई थीम पर बस एक भिन्नता है, लेकिन इसके बारे में कैसे:

एक Thing ,

export default function ThingA () {}

things/index.js ,

export {default as ThingA} from './ThingA'
export {default as ThingB} from './ThingB'
export {default as ThingC} from './ThingC'

फिर कहीं और चीजों का उपभोग करने के लिए,

import * as things from './things'
things.ThingA()

या बस कुछ चीजों का उपभोग करने के लिए,

import {ThingA,ThingB} from './things'

मुझे नहीं लगता कि यह संभव है, लेकिन मॉड्यूल नामों का संकल्प मॉड्यूल लोडर तक है, इसलिए लोडर कार्यान्वयन हो सकता है जो इसका समर्थन करता है।

तब तक, आप lib/things/index.js पर इंटरमीडिएट "मॉड्यूल फ़ाइल" का उपयोग कर सकते हैं जिसमें अभी शामिल है

export * from 'ThingA';
export * from 'ThingB';
export * from 'ThingC';

और यह आपको करने की अनुमति देगा

import {ThingA, ThingB, ThingC} from 'lib/things';

यदि आप ए, बी, सी में डिफ़ॉल्ट निर्यात नहीं करते हैं, लेकिन बस {} निर्यात करते हैं तो ऐसा करना संभव है

// things/A.js
export function A() {}

// things/B.js
export function B() {}

// things/C.js
export function C() {}

// foo.js
import * as Foo from ./thing
Foo.A()
Foo.B()
Foo.C()

@ बर्गी के जवाब के लिए बस एक और दृष्टिकोण

// lib/things/index.js
import ThingA from './ThingA';
import ThingB from './ThingB';
import ThingC from './ThingC';

export default {
 ThingA,
 ThingB,
 ThingC
}

उपयोग

import {ThingA, ThingB, ThingC} from './lib/things';




es6-modules