質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

2446閲覧

es2015で書いたjsのmoduleをclient-sideで動的にrequireするベストプラクティス

hojo

総合スコア195

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/12/15 01:55

編集2016/12/15 02:02

タイトル通りなのですが、es2015で実装されたexportを利用してモジュールを作成したのですが、そのモジュールをbabelでトランスパイルした後、クライアントサイドで動的にrequireしたいと思っています。

色々検索したのですが、browserifyを利用することでソースコードを書き換え、ブラウザ実行時にはすでにrequire済みとなるような手法はたくさん出てきました。

しかし私は、ブラウザがモジュールをajaxで動的に読み込んでモジュールを手に入れるようなrequireを実現したいのです。

色々探していたのですが、意外にもjquery.getScript()が理想に近かったです。しかし、このメソッドは実行するとスクリプトが自動的に実行されてしまうので、ダメでした。

そこで以下のようなjQueryプラグインを自作しました。

javascript

1 // 外部スクリプトを読み込むjQuery.requireを作成します。 2 $.require = function(url){ 3 return new Promise((res, rej)=>{ 4 $.ajax({url, dataType: 'text'}).fail(rej).done((data)=>{ 5 res(eval(`(function(){${data} return exports.default||exports})()`)) 6 }) 7 }) 8 } 9 10 // jQuery.requireを利用して 11 // トランスパイル済みのmodule.jsを読み込む 12 let module = $.require('http://example.com/module.js') 13

うまく動作しているような気がするのですが、こういったライブラリはすでに存在するのではないか?もし存在するなら多くの人が利用しているそちらのライブラリを使用したいなと思いました。

もし、何かそういったライブラリや、そのほかの手法(ベストプラクティスでなくてもよいので)をご存知の方がいらっしゃいましたらアドバイスいただけないでしょうか?

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

webpackで出来ます。
詳しくはasynchronous requireの説明を見てください。

投稿2016/12/21 00:02

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「クライアントサイドで動的にrequireしたい」というのであれば、ちょうどそういったライブラリであるRequireJSというのがあります。

ただ、Node.jsにしてもES6のimportにしても、ライブラリの取り込みは同期的に行われるのが主流となっているので、Require.jsなど非同期に行うことそのものが、ベストプラクティスから外れてしまっている感もあります。

投稿2016/12/15 02:06

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問