मैं अपने प्रोजेक्ट में कुछ ES6 कोड चलाने की कोशिश कर रहा हूं, लेकिन मुझे एक अप्रत्याशित टोकन त्रुटि मिल रही है।
export class MyClass {
constructor() {
console.log("es6");
}
}
module.exports = MyClass
, नहींexport class MyClass
मैं अपने प्रोजेक्ट में कुछ ES6 कोड चलाने की कोशिश कर रहा हूं, लेकिन मुझे एक अप्रत्याशित टोकन त्रुटि मिल रही है।
export class MyClass {
constructor() {
console.log("es6");
}
}
module.exports = MyClass
, नहींexport class MyClass
जवाबों:
आप ES6 मॉड्यूल सिंटैक्स का उपयोग कर रहे हैं।
इसका अर्थ है कि आपका वातावरण (उदा। नोड .js) ES6 मॉड्यूल सिंटैक्स का समर्थन करना चाहिए।
NodeJS राष्ट्रमंडल मॉड्यूल सिंटैक्स ( module.exports
) नहीं ES6 मॉड्यूल सिंटैक्स ( export
कीवर्ड) का उपयोग करता है।
उपाय:
babel
अपने ES6 को commonjs
लक्ष्य तक पहुंचाने के लिए npm पैकेज का उपयोग करेंया
CommonJS सिंटैक्स के उदाहरण हैं ( flaviocopes.com/commonjs/ से ):
exports.uppercase = str => str.toUpperCase()
exports.a = 1
import
मूल रूप से कब समर्थन करेगा ? मैंने सोचा कि v10.0.0 यह होगा, लेकिन जाहिरा तौर पर नहीं।
यदि आपको यह त्रुटि मिलती है तो यह भी संबंधित हो सकता है कि आपने जावास्क्रिप्ट फ़ाइल को अपने html पेज में कैसे शामिल किया। मॉड्यूल लोड करते समय आपको उन फाइलों को स्पष्ट रूप से घोषित करना होगा। यहाँ एक उदाहरण है:
//module.js:
function foo(){
return "foo";
}
var bar = "bar";
export { foo, bar };
जब आप स्क्रिप्ट को इस तरह शामिल करते हैं:
<script src="module.js"></script>
आपको त्रुटि मिलेगी:
बिना पढ़ा हुआ वाक्यविन्यास: अप्रत्याशित टोकन निर्यात
आपको फ़ाइल को "मॉड्यूल" पर सेट एक प्रकार की विशेषता के साथ शामिल करने की आवश्यकता है:
<script type="module" src="module.js"></script>
और फिर यह उम्मीद के मुताबिक काम करेगा और आप अपने मॉड्यूल को दूसरे मॉड्यूल में आयात करने के लिए तैयार हैं:
import { foo, bar } from "./module.js";
console.log( foo() );
console.log( bar );
type
वैध माइम प्रकार (उर्फ मीडिया प्रकार) होने की उम्मीद है, इसलिए यह एक अप्रत्याशित खोज थी। धन्यवाद!
<script type="module">import ...</script>
मॉड्यूल से आयात करते समय उपयोग करना होगा । मैंने क्रोमियम के हालिया संस्करण में इसका परीक्षण किया।
मेरे दो सेंट
ES6
myClass.js
export class MyClass1 {
}
export class MyClass2 {
}
other.js
import { MyClass1, MyClass2 } from './myClass';
CommonJS वैकल्पिक
myClass.js
class MyClass1 {
}
class MyClass2 {
}
module.exports = { MyClass1, MyClass2 }
// or
// exports = { MyClass1, MyClass2 };
other.js
const { MyClass1, MyClass2 } = require('./myClass');
ES6
myClass.js
export default class MyClass {
}
other.js
import MyClass from './myClass';
CommonJS वैकल्पिक
myClass.js
module.exports = class MyClass1 {
}
other.js
const MyClass = require('./myClass');
उम्मीद है की यह मदद करेगा
ईएस 6 ऐड का उपयोग करने के लिए babel-preset-env
और आपके में .babelrc
:
{
"presets": ["@babel/preset-env"]
}
उत्तर अपडेट किया गया धन्यवाद बघेल 7 लगाने के लिए @aganbari टिप्पणी के लिए।
babel
लेखक ने पहले ही टैग कर दिया था । जबकि फिल रिकेट्स का जवाब समस्या को स्पष्ट करता है, जो अच्छा है, यह उत्तर लेखक की समस्या का सीधा समाधान है।
इस समय बबेल का उपयोग करने की कोई आवश्यकता नहीं है (जेएस बहुत शक्तिशाली हो गया है) जब आप बस डिफ़ॉल्ट जावास्क्रिप्ट मॉड्यूल निर्यात का उपयोग कर सकते हैं। पूर्ण ट्यूटोरियल की जाँच करें
Message.js
module.exports = 'Hello world';
app.js
var msg = require('./Messages.js');
console.log(msg); // Hello World
बाबेल संकुल को स्थापित करें @babel/core
और @babel/preset
जो ES6 को एक सामान्य लक्ष्य के रूप में परिवर्तित करेगा क्योंकि नोड js को सीधे ES6 लक्ष्य समझ में नहीं आते हैं
npm install --save-dev @babel/core @babel/preset-env
फिर आपको .babelrc
अपनी परियोजना की मूल निर्देशिका में नाम के साथ एक कॉन्फ़िगरेशन फ़ाइल बनाने और इस कोड को वहां जोड़ने की आवश्यकता है
{
"presets": ["@babel/preset-env"]
}
मैंने प्रविष्टि बिंदु फ़ाइल जैसी बनाकर इसे ठीक किया।
// index.js
require = require('esm')(module)
module.exports = require('./app.js')
और मेरे द्वारा आयात की गई किसी भी फ़ाइल app.js
को imports/exports
अभी आपके साथ काम किया गया है जैसे आप इसे चलाते हैंnode index.js
नोट: यदि app.js
उपयोग करता है export default
, require('./app.js').default
तो प्रवेश बिंदु फ़ाइल का उपयोग करते समय यह बन जाता है ।
ES6 सिंटैक्स का उपयोग नोड में काम नहीं करता है, दुर्भाग्य से, आपको कंपाइलर को निर्यात या आयात जैसे सिंटैक्स को समझने के लिए स्पष्ट रूप से बाबेल होना चाहिए।
npm install babel-cli --save
अब हमें एक .babelrc फ़ाइल बनाने की आवश्यकता है, babelrc फाइल में, हम ES5 का संकलन करते समय अपने प्रीसेट के रूप में स्थापित es2015 प्रीसेट का उपयोग करने के लिए बैबेल सेट करेंगे।
हमारे एप्लिकेशन की जड़ में, हम एक .babelrc फ़ाइल बनाएंगे। $ npm बाबेल-प्रीसेट-es2015 -save स्थापित करें
हमारे एप्लिकेशन की जड़ में, हम एक .babelrc फ़ाइल बनाएंगे।
{ "presets": ["es2015"] }
मुझे भरोसा है ये काम करेगा ... :)
export
कि केवल ES6 में उपलब्ध है, और वे मॉड्यूल हैं जो ES6 सहायता प्रदान करते हैं।