ECMAScript 6 को आयात करते समय "बिना पढ़ा हुआ वाक्य रचना: मॉड्यूल के बाहर आयात विवरण का उपयोग नहीं किया जा सकता है"


91

मैं ArcGIS JSAPI 4.12 का उपयोग कर रहा हूं और उपयोग करना चाहता हूं मानचित्र पर सैन्य प्रतीकों को आकर्षित स्थानिक भ्रम का ।

जब मैं जोड़ता हूं milsymbol.js स्क्रिप्ट में , कंसोल त्रुटि देता है

बिना पढ़ा हुआ वाक्यविन्यास: किसी मॉड्यूल के बाहर आयात विवरण का उपयोग नहीं किया जा सकता

इसलिए मैं जोड़ता हूं type="module" स्क्रिप्ट में , और फिर वापस लौटता है

बिना संदर्भित संदर्भ: एमएस परिभाषित नहीं है

यहाँ मेरा कोड है:

<link rel="stylesheet" href="https://js.arcgis.com/4.12/esri/css/main.css">
<script src="https://js.arcgis.com/4.12/"></script>
<script type="module" src="milsymbol-2.0.0/src/milsymbol.js"></script>

<script>
    require([
        "esri/Map",
        "esri/views/MapView",
        "esri/layers/MapImageLayer",
        "esri/layers/FeatureLayer"
    ], function (Map, MapView, MapImageLayer, FeatureLayer) {

        var symbol = new ms.Symbol("SFG-UCI----D", { size: 30 }).asCanvas(3);
        var map = new Map({
            basemap: "topo-vector"
        });

        var view = new MapView({
            container: "viewDiv",
            map: map,
            center: [121, 23],
            zoom: 7
        });
    });
</script>

इसलिए, चाहे मैं जोड़ दूं type="module" या नहीं, हमेशा त्रुटियां होती हैं। हालांकि, स्थानिक भ्रम के आधिकारिक दस्तावेज type="module"में, स्क्रिप्ट में कोई भी नहीं है । मैं अब वास्तव में भ्रमित हूँ। वे प्रकार को जोड़े बिना इसे प्राप्त करने का प्रबंधन कैसे करते हैं?

फ़ाइल milsymbol.js

import { ms } from "./ms.js";

import Symbol from "./ms/symbol.js";
ms.Symbol = Symbol;

export { ms };

1
मॉड्यूल आयात करने का प्रयास करते समय मुझे वही त्रुटि मिल रही है! क्या आपको कोई समाधान मिलता है?
जीशान अहमद खलील

मैं अब ब्राउजर का उपयोग कर रहा हूं जिसके माध्यम से मैं किसी भी मॉड्यूल का उपयोग करके शामिल कर सकता हूं require()। इस वीडियो को देखें
जीशान अहमद खलील

जवाबों:


62

मुझे यह त्रुटि मिली क्योंकि मैं स्क्रिप्ट टैग के अंदर टाइप = "मॉड्यूल" भूल गया:

<script type="module" src="milsymbol-2.0.0/src/milsymbol.js"></script>

51

ऐसा लगता है कि त्रुटियों का कारण हैं:

1) आप वर्तमान में srcनिर्देशिका में निर्मित फ़ाइल के बजाय निर्देशिका में स्रोत फ़ाइल लोड कर रहे हैं dist(आप देख सकते हैं कि इच्छित वितरित फ़ाइल यहाँ क्या है )। इसका अर्थ यह है कि आप मूल स्रोत कोड का उपयोग अनलल्ड / अनबंड स्थिति में कर रहे हैं, जिससे निम्न त्रुटि हो सकती है Uncaught SyntaxError: Cannot use import statement outside a module:। यह बंडल संस्करण का उपयोग करके तय किया जाना चाहिए क्योंकि बंडल बनाने के लिए पैकेज रोलअप का उपयोग कर रहा है।

2) आप Uncaught ReferenceError: ms is not definedत्रुटि प्राप्त कर रहे हैं इसका कारण यह है कि मॉड्यूल को बंद कर दिया गया है, और चूंकि आप मूल मॉड्यूल का उपयोग करके पुस्तकालय लोड कर रहे हैं, msइसलिए वैश्विक दायरे में नहीं है और इसलिए निम्न स्क्रिप्ट टैग में पहुंच योग्य नहीं है।

ऐसा लगता है कि आपको distइस फ़ाइल के संस्करण को लोड करने में सक्षम होना चाहिए जिस पर msपरिभाषित किया गया है window। की जाँच करें इस उदाहरण पुस्तकालय लेखक की ओर से यह कैसे किया जा सकता है का एक उदाहरण देख सकते हैं।


आपके उत्तर के लिए धन्यवाद, अब मुझे पता है कि मेरे पास गलत फ़ाइल है। मैं फाइल के डिस्टर्ब वर्जन की तलाश में हूं लेकिन कोई नतीजा नहीं निकला। क्या आप डिस्टर्ब वर्जन पाने का कोई तरीका जानते हैं? बहुत बहुत धन्यवाद!
जेरी चेन

यह npm ( npmjs.com/package/milsymbol ) पर डाउनलोड के लिए उपलब्ध है । वैकल्पिक रूप से, आप इसे रेपो क्लोनिंग और बिल्ड स्क्रिप्ट्स में से एक चलाकर स्वयं बना सकते हैं। ऐसा लगता है कि एक एएमडी बिल्ड स्क्रिप्ट है ( github.com/spatialillusions/milsymbol/blob/master/… ) जो आपको requireसीधे आपके कोड में निर्मित पैकेज की अनुमति देनी चाहिए ।
काई

1
मैंने npm के माध्यम से डाउनलोड किया है, अब मेरे पास स्क्रिप्ट है: <script src="node_modules/milsymbol/dist/milsymbol.js"></script>लेकिन कंसोल अभी भी लौटा है Uncaught ReferenceError: ms is not defined। समस्या में msपरिभाषित नहीं है dist/milsymbol.js, यह में परिभाषित किया गया है src/milsymbol.js, लेकिन यह आवश्यकता है type="module"और गुंजाइश समस्या का कारण होगा। क्या इसका कोई समाधान है। बहुत बहुत धन्यवाद!
जेरी चेन

5

मैंने निम्न कार्य करके इस समस्या को हल किया:

ब्राउज़र से ECMAScript 6 मॉड्यूल का उपयोग करते समय, अपनी फ़ाइलों में .js एक्सटेंशन का उपयोग करें और स्क्रिप्ट टैग ऐड में type = "module"

Node.js वातावरण से ECMAScript 6 मॉड्यूल का उपयोग करते समय, .mjsअपनी फ़ाइलों में एक्सटेंशन का उपयोग करें और फ़ाइल चलाने के लिए इस कमांड का उपयोग करें:

node --experimental-modules filename.mjs

5

मैं भी उसी मुद्दे का सामना कर रहा था जब तक मैंने स्क्रिप्ट में टाइप = "मॉड्यूल" नहीं जोड़ा। इससे पहले ऐसा था

<script src="../src/main.js"></script>

और इसे बदलने के बाद

<script type="module" src="../src/main.js"></script>

इसने पूरी तरह से काम किया


1

त्रुटि को ट्रिगर किया गया है क्योंकि आप जिस फ़ाइल को अपनी HTML फ़ाइल में लिंक कर रहे हैं, वह फ़ाइल का अनब्लॉक संस्करण है। पूर्ण बंडल्ड संस्करण प्राप्त करने के लिए आपको इसके साथ इंस्टॉल करना होगा npm:

npm install --save milsymbol

यह आपके node_modulesफ़ोल्डर में पूरा पैकेज डाउनलोड करता है ।

इसके बाद आप स्टैंडअलोन की न्यूनतम जावास्क्रिप्ट फ़ाइल एक्सेस कर सकते हैं node_modules/milsymbol/dist/milsymbol.js

आप इसे किसी भी निर्देशिका में कर सकते हैं, और फिर नीचे दी गई फ़ाइल को अपनी /srcनिर्देशिका में कॉपी कर सकते हैं।



0

बस src में टैग में .packनाम और एक्सटेंशन के बीच जोड़ें <script>। अर्थात:

<script src="name.pack.js">
// code here
</script>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.