前提・実現したいこと
一つの.jsファイルを3つに分けたです。一つのファイルの時はうまく作動しています。
ProgateのJavaScriptの練習Ⅴの状態ではできていますが、VSCodeで同じこと(コードをコピペ)をしてもうまく作動しません。
発生している問題・エラーメッセージ
uncaught SyntaxError: Cannot use import atatment outside a module
該当のソースコード
//1枚目のファイル。ファイル名script.jp import Dog from "./dog"; const dog = new Dog("レオ", 4, "チワワ"); dog.info(); //2枚目のファイル。ファイル名dog.jp import Animal from "./animal"; class Dog extends Animal { constructor(name, age, breed) { super(name, age); this.breed = breed; } info() { this.greet(); console.log(`名前は${this.name}です`); console.log(`犬種は${this.breed}です`); console.log(`${this.age}歳です`); const humanAge = this.getHumanAge(); console.log(`人間年齢で${humanAge}歳です`); } getHumanAge() { return this.age * 7; } } export default Dog; //3枚目のファイル。ファイル名animal.jp class Animal { constructor(name, age) { this.name = name; this.age = age; } greet() { console.log("こんにちは"); } info() { this.greet(); console.log(`名前は${this.name}です`); console.log(`${this.age}歳です`); } } export default Animal; //もともとのファイル(うまく作動しています) class Animal { constructor(name, age) { this.name = name; this.age = age; } greet() { console.log("こんにちは"); } info() { this.greet(); console.log(`名前は${this.name}です`); console.log(`${this.age}歳です`); } } class Dog extends Animal { constructor(name,age,breed){ super(name,age); this.breed = breed; } info() { this.greet(); console.log(`名前は${this.name}です`); console.log(`犬種は${this.breed}です`); console.log(`${this.age}歳です`); const humanAge = this.getHumanAge(); console.log(`人間年齢で${humanAge}歳です`); } getHumanAge() { return this.age * 7; } } const dog = new Dog("レオ", 4,"チワワ"); dog.info();
試したこと
違うファイルをつかったり、再起動したしました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
JavaとJavaScriptを勘違いされている気がします。
JavaScriptです。すみません。JavaとJavaScriptは違うものなのですね。
はい。JavaとJavaScriptは名前が似ているだけで全く違う物ですので覚えておいて下さい。
後、Progeteではなく、Progateですね。自分はやったことないのですが
その様子だと内容を間違えているのかも?
なにをどう分けたいのですか?
一つではどうしてだめなのですか?
質問編集されましたが、
「JavaScript」と「Java Script」ではこれまた意味が変わってきますので前者に書き換えた上で
「JavaScript」タグを付けて下さい。
色々すみません、ありがとうございます。
yamabejpさんありがとうございます。
《なにをどう分けたいのですか?》
A.jsというファイルを 「a.js」 と 「b.js」 と 「c.js」 の三つのファイルに分けたいです。
(機能は同じです。)
《一つではどうしてだめなのですか?》
Progate というプログラミング練習サイトの課題に出てきたからです。
Progate の解説では以下の様に書いてあります
「コードの量が増えてくると1つのファイルで管理するのが大変になるため、複数のファイルでコードを管理することがあります。」
JavaScriptのimportは、ローカルでは使用できなく、ローカルの場合は、サーバーを立てて(ローカルサーバーでもOK)httpアクセスでないと使用できませんが、
そこらへんの環境の整備はされてますか?
つまり、HTMLをダブルクリックで開いた状態では、import機能は使うことができないってことです。
miyabi_takatsukさんありがとうございます。
「サーバーを立てて」たぶんこれかもしれません。「サーバーを立てる」で調べなおしてみます。
VSCodeの「Live Server」拡張機能を使用しているのでサーバーは立っている(?)のではないかと思います。
なるほど。maisumakunさんの回答は、この話のことを言われています。
ローカルサーバー で調べると良いかと。
ただし、
ローカルサーバーを構築するアプリケーションは、
OSによって相性があるため、
Windows → XAMPP
macOS → MAMP
を使用してください。
逆にすると、
初学者には到底手に負えない不都合が生じる可能性があります。
XAMPPは何かの時にインストールしているのでその辺で見てみます。(私はWindowsです)
なるほど、それは、httpアクセスであり、ドメインの名前解決はされている機能なのでしょうか?
(名前解決は必要ないかもですが、httpアクセスである必要はあります)
また、
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/import
にある通り、
<script type="module">という記述はしておりますか?
XAMPPでやった方が無難ですね。
VSCodeのその機能は、もっと調べないと私自身わからないですが。
<script type="module">は書くのも試しました。XAMPP関係もう少し探してみます。ありがとうございます。
> <script type="module">
この記述は最低限必要になります。
読み込みを行う(importを行う)JSファイルにて必要です。
それでもできなかったのであれば、
Live Serverではimportは使えないのかも。
XAMPPでうまくいくとよいですね。
ありがとうございます。がんばります
.jsを付けたらできました。
(progateではなしで動いてますが、、、)
import Animal from "./animal.js";
import Dog from "./dog.js";
みなさまありがとうございました。
感謝感謝です!!
回答1件
あなたの回答
tips
プレビュー