Babel का 6 वां संस्करण export default
के फ़ंक्शनिंग को बदलता है और विशेष रूप से 0jके साथ इसका संबंध बदलता है।वेबपैक के लाइब्रेरी आउटपुट को बेबेल 6
संक्षेप में, जब तक बैबेल 5, require('module')
मॉड्यूल का डिफ़ॉल्ट निर्यात दे रहा है, अब यह हमेशा मॉड्यूल ऑब्जेक्ट को मॉड्यूल के सभी निर्यातों को वापस देता है। यदि कोई केवल डिफ़ॉल्ट चाहता है, तो उसे require('module').default
का उपयोग करना होगा। As explained here, there is very good reasons behind this और इस प्रश्न का उद्देश्य इस व्यवहार को तोड़ना या हैक करना नहीं है।
हालांकि, अगर एक एक पुस्तकालय बनाने जा रहा है, वह/वह आमतौर पर नहीं एक मॉड्यूल लेकिन अपने पुस्तकालय के निर्यात मूल्य (जैसे एक समारोह है, जो कुछ मॉड्यूल प्रणाली आंतरिक रूप से प्रयोग किया जाता है) वितरित करने के लिए चाहता है। यह अच्छी तरह से webpack द्वारा के साथ निपटा जाता है और output.library
विन्यास जब commonjs या AMD का उपयोग कर। चूंकि पूर्व बेबेल के संस्करणों ने सामान्य निर्यात को सामान्यज के साथ आवश्यक होने की अनुमति दी, इसलिए लेबल इस तंत्र के साथ भी संगत था। हालांकि अब यह मामला नहीं है: पुस्तकालय अब हमेशा एक ईएस 6 मॉड्यूल ऑब्जेक्ट प्रदान करता है।
यहां एक उदाहरण है।
src/main.js
export default "my lib content";
webpack.config.js
var path = require("path");
var webpack = require("webpack");
module.exports = {
entry: {
lib: [ path.resolve(__dirname, "src/main.js") ],
},
output: {
path: path.join(__dirname, "dist"),
filename: "mylib-build.js",
library: 'myLib'
},
module: {
loaders: [
{
test: /\.js$/,
loader: "babel",
include: path.join(__dirname, "src"),
query: { presets: ['es2015'] }
}
]
}
};
test.html
<html>
<head></head>
<body>
<script src="dist/mylib-build.js"></script>
<!-- `myLib` will be attached to `window` -->
<script>
console.log(JSON.stringify(myLib)); // { default: "my lib content" }
</script>
</body>
</html>
यह एक बहुत ही simpl है ई उदाहरण लेकिन मैं स्पष्ट रूप से { default: "my lib content" }
के बजाय mylib का स्ट्रिंग "my lib content"
होना चाहता हूं।
एक समाधान परिवर्तन प्रदर्शन करने के लिए commonjs में एक निर्यात स्रोत फ़ाइल बनाने के लिए हो सकता है:
module.exports = require('./main').default;
हालांकि मैं इस समाधान काफी खराब हैं। स्रोत कोड को बदलने के बिना, इसे संकलन स्तर पर हल करने में सक्षम होना चाहिए। कोई विचार?
* * बिल्कुल यकीन नहीं है कि आप किस प्रकार का जवाब चाहते हैं। यदि आपको लगता है कि यह एक संकलन विकल्प होना चाहिए, तो आपको इसे डेवलपर को सुझाव देना चाहिए। –
वेबपैक विन्यास बहुत शक्तिशाली है। सभी लोडर के लिए कई अलग-अलग प्लगइन्स और कई अलग-अलग पैरामीटर हैं। –
उदाहरण के लिए, यदि कोई केवल डिफ़ॉल्ट निर्यात का उपयोग करता है, तो वह [babel-plugin-transform-es2015-modules-commonjs] (http://babeljs.io/docs/plugins/transform-es2015-modules-commonjs/) का उपयोग कर सकता है और अपने सभी es6 संकुल को आमज में बदल दें। –