最近、Ruan Yifeng の ES6 入門書を読みました。下の図の丸で囲ったところがよくわかりません。
この記事では、.js サフィックスは省略できないと述べられています。
しかし、次のような記述が以下に表示されます:
Hereimport { counter, incCounter } from './lib';
.js
サフィックス名が省略されていませんか?
他の人が書いたいくつかの反応コードとの比較:
import React from "react";
.js
サフィックスもここでは省略されていますが、import App from "./containers/App.jsx";
しかし、サフィックス名は完全に書き出されていました。
何人かの専門家に私の質(zhì)問に答えてもらいたいです: どのような狀況で import..from の後に
.js のようなサフィックス名を記述すべきであり、どのような場合に記述すべきでないか書く ## #。それとも、誰かがツールを使ってサフィックス名を書く必要がないように設(shè)定したためでしょうか。 ###どうもありがとう! ! !
閉關(guān)修行中......
ブラウザは import ステートメントを解析するときにサフィックスを必要とします。より正確には、ブラウザはインポート後の文字列を URL アドレスとして認(rèn)識します。これは、CSS ファイルに background-image: url(./path/to/a.jpg)
を記述するのと同じです。ブラウザは、現(xiàn)在のファイルとページの BaseURL に基づいて依存リソースの URL アドレスを取得し、HTTP リクエストをサーバーに送信します。 JS またはイメージをホストするリソース サーバーがブラウザの HTTP リクエストに正しく応答できる限り、ブラウザは HTTP リクエストの URL アドレスではそれほど重要ではありません。サフィックスは自由に定義できます (もちろん、一般的なリソース サーバーには、ファイル拡張子から HTTP 応答ヘッダーの MIMEType へのマッピングがあります。サーバーが正しく応答できるように、他のカスタム サフィックスを追加することもできますが、それが最善です)。同意したとおりに設(shè)定する)、またはチートすることもできます。URL は http://a.com/b.jpg です。返されるコンテンツは、応答ヘッダー
application/javascript を持つテキスト文字です。
パッケージ化ツールの場合、互換性のため、jsのインポート文は、webpackの__webpack_require__
, 瀏覽器最后加載的是打包后的 bundle 文件,并沒有執(zhí)行 import 語句(大部分瀏覽器至今尚未實(shí)現(xiàn)import)。 這個時候,我們寫的 import 后面到底要不要后綴,全憑工具自己定義規(guī)則啊,只要工具在編譯打包時能找到被依賴模塊。比如webpack可以設(shè)定先找 .ts
如果沒有再找 .es
再找 .js
, 如果是一個文件夾,就看文件夾里有沒有 index.js
,甚至從node_modules
ディレクトリ內(nèi)を検索するなど、ES5で実裝されたモジュール管理のインポート文に変換されます...
翻訳およびパッケージ化ツール: 書く必要はありません
ES6 ノードをネイティブにサポート: 記述する必要はありません
ES6 をネイティブにサポートするブラウザ: URL を通じてサーバー上で ES6 を見つける必要があるだけで、HTTP2 が実際に普及し、ES6 がブラウザに完全に実裝され、ファイルをパッケージ化する必要がなくなると、パッケージ化ツールは次のようになります。簡単に対処する方法。
個人的な意見:
例: React、react-dom、vue などはすべてコントリビューター NPM package
によってリリースされます (つまり、パッケージ化された modules )。これらはすべて、NPM を使用してインストールされた後、node_modules ディレクトリに保存されます。上記モジュール
JS ファイルはモジュールではありません (ここで述べられていることは完全ではありません)
は ES6 で提供されます (インポートとエクスポートを使用してモジュールを定義します)模塊化
.js
不能省略,主要是為了可讀,以及區(qū)分。假設(shè)你目錄下有個自己寫的模塊test
,還有一個自己寫的js文件test.js
。模塊是以文件夾形式存在的,然后你用import './test'
,你無法確定你加載的是模塊還是test.js
(ただし、ES6 では、JS ファイルもモジュールとみなされます)。
このコードimport React from "react"
,并不是省略了.js
,而是直接省略了/index.js
。這是一個由npm安裝的包,在node_modules
文件夾下面,其實(shí)它導(dǎo)入的是node_modulesreactindex.js
,是整個包的入口文件,然后由index.js
再去加載react
需要用到的其他子js
あなたが見ているファイル
node.js では、ES6 の公開パッケージの import
語法,所以需要通過require()
引入包,用module.exports
和exports
インポート可能な部分はまだサポートされていないことに注意してください。
詳細(xì)については、MDN ドキュメントを參照してください