web-dev-qa-db-ja.com

ES6:URLからモジュールをインポート

ES6の外部URLからJavaScriptモジュールをインポートすることはできますか?

私は試しました(babel-nodeを使用):

import mymodule from 'http://...mysite.../myscript.js';
// Error: Cannot find module 'http://...mysite.../myscript.js'
32
madox2

2018更新:モジュールローダーの仕様は、ES仕様の一部になりました-<script type="module">ブラウザでは、カスタム--loader Node.jsと同様、Denoに興味があるなら。


モジュールローダーの仕様とインポート/エクスポートの構文は別々です。したがって、これはモジュールローダーのプロパティです(ES仕様の一部ではありません)。 SystemJS などのプラグインをサポートするモジュールローダーを使用する場合。

22

TL; DR:

今のところ、no

長い答え:

2つの異なる仕様があります。ES6は、エクスポート/インポートの構文を定義します。そして、このモジュールのロード方法howを実際に定義する Loader Spec があります。

仕様についてはさておき、開発者にとって重要な部分は次のとおりです。

JavaScript Loaderを使用すると、Node.jsやブラウザーなどのホスト環境で、要求に応じてモジュールをフェッチおよびロードできます。 Browserify、WebPack、jspmなどのフロントエンドパッケージソリューションがロードプロセスにフックできるようにするフック可能なパイプラインを提供します。

この部門は、開発者がすべてのJavaScript環境で使用できる単一の形式と、環境ごとに個別の読み込みメカニズムを提供します。たとえば、Nodeローダーは独自のモジュール検索アルゴリズムを使用してファイルシステムからモジュールをロードしますが、ブラウザーローダーはモジュールを取得し、ブラウザーが提供するパッケージ形式を使用します。

(...)

主な目標は、このプロセスをできるだけNodeとブラウザ環境で一貫させることです。たとえば、JavaScriptプログラムが.coffeeファイルをJavaScriptにオンザフライで、ローダーは使用可能な「変換」フックを定義します。これにより、一部の詳細(具体的には、ホスト定義ストレージから特定のモジュールを取得するプロセス)が環境間で異なる場合でも、プログラムはロードプロセスに参加できます。

そのため、ホスト環境(ノード、ブラウザ、バベルなど)に依存してモジュールを解決/ロードし、プロセスにフックを提供します。

4
madcampos

また、 scriptjs を使用することもできます。これは、私の場合、必要な構成が少なくなります。

var scriptjs = require('scriptjs');

scriptjs('https://api.mapbox.com/mapbox.js/v3.0.1/mapbox.standalone.js', function() {
    L.mapbox.accessToken = 'MyToken';
});
3
BaptWaels