2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

typescriptでimportとexportを使う

Posted at

ファイル分割するときにimport,exportを使おうとしたらハマった

moduleの違い

es6の書き方に慣れていたため,importとexportを使って実装したい...

export.ts
export ClassName {
    
}
import.ts
import { ClassName } from "./export.js";

よし,コンパイルだ!!

Uncaught ReferenceError: exports is not defined

ブラウザ上でこんなエラーが出る.

調べてみるとCommonJSモジュールの問題だと分かったので,moduleを「ES6」に変更

【TypeScript】モジュール分割で起きたエラーを調べる(CommonJSが原因)

exports is not definedエラーはCommonJSが原因

tsconfig.json
"module": "CommonJS",

"module": "ES6",

こんな感じで変更してコンパイルされているのを確認し,ページをリロード

そしたらまたこんなエラーが出た

Uncaught SyntaxError: Cannot use import statement outside a module

ブラウザ上でモジュールを使う

これについて調べてみると,問題はモジュールをブラウザ上で使う際にscriptタグの中に

<script type="module"></script>

を追加しなければならないことがわかった.

MDN Web Docs

最初に type="module" を script 要素に含めることで、そのスクリプトがモジュールであることを宣言します。

これを追記して再チャレンジ

そしたらまたまたエラーが出た

Access to script at 'file:///Users/~/import.js' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, chrome-untrusted, https.
index.html:7 GET file:///Users/~/export.js net::ERR_FAILED

moduleをブラウザで使うときはhttp通信じゃないといけない

上記のエラーの内容はHTTP通信しなさいということだったのでローカルサーバーを立ち上げてみた.

今回は簡単に「serve」を使ってみる.

npm install -g serve
でインストール
serve
でローカルサーバー立ち上げ

これで立ち上がったローカルサーバーにアクセスしたら,なんとか成功!!

まとめ

typescriptでimport,exportを用いてファイル分割をしたいときには

  • ES6モジュールを使う
  • scriptタグの中にtype="module"を追記
  • ローカルサーバーを立てる
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?