「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
最近、のJavaScriptモジュール以下のような文字列が入っていたりしてフリーズしますね。
var myModule = require('...');
何気に、Reactも書いてますが、JavaScriptやってる自覚がなかったりします(ES6ですし)。
詳細 †
モジュール化API †
最近はAMD(Asynchronous Module Definition)ではなく
CommonJS上でのモジュール化仕様
ES2015の仕様が策定されたことにより、
標準でモジュール化が可能となった。
AMD(Asynchronous Module Definition) †
- 非同期処理を利用したブラウザ・ファーストな手法
- ブラウザ環境でモジュールの恩恵が受けられる。
- RequireJSで遅延ロード or コンパイル
- サーバサイドの仕組みとAMDは合わない。
参照方法 †
scriptタグ †
ブラウザからモジュール化されていないJSを使用する。
<script src="XXXX.js"></script>
require構文 †
- require()はCommonJSの仕様
- Node.jsで外部ライブラリを参照する方法
- npmでインストールしたものはrequire()で読み込める。
- メリット
- 再利用し易くなる。
- 単体テストがし易くなる。
- 特に、Reactとは相性がイイ。
※ ossc-test-library1
module構文(import) †
- 概要
- ES2015から利用できる書き方。
- 対応ブラウザがまだ少ない。
- Babelを通じて require構文 に変換後、
webpackなどを通じて依存関係を解決する。
※ ossc-test-library1
※ AMD †
define(['myModule', 'myOtherModule'], function(myModule, myOtherModule) {
console.log(myModule.hello());
});
モジュール・ローダー(バンドラー) †
RequireJS †
AMD派からRequireJSが生まれる。
がある。
- トレンド
- 非同期で読み込み可能なのが優位点だった。
- 主流ではなくなってきており採用する機会は少ない。
CommonJS派からもRequireJSに対抗してBrowserifyが生まれる。
- html から src で js を呼び出す js 側でCommonJSを使用したいケースで使用する。
- ルートフォルダにwebpack.config.jsを作成する
// output.pathに絶対パスを指定する必要があるため、pathモジュールを読み込んでおく
const path = require('path');
module.exports = {
// モードの設定、v4系以降はmodeを指定しないと、webpack実行時に警告が出る
mode: 'development',
// エントリーポイントの設定
entry: './www/scripts/index.js',
// 出力の設定
output: {
// 出力するファイル名
filename: 'bundle.js',
// 出力先のパス(絶対パスを指定する必要がある)
path: path.join(__dirname, 'www/scripts')
}
};
- entry値は、Cordovaの場合
'./www/scripts/index.js'
- ビルド出力は
'www/scripts/bundle.js'
- webpackでビルドする
call webpack
モジュール実装方法 †
CommonJSあるいはES2015 Moduleで定義。
- 概要
- 関数をモジュール化する場合はexportsを使う。
- クラスをモジュール化する場合はmodule.exportsを使う。
- exports と module.exports の間の関係が魔法の
ように見えるなら、module.exports だけを使う。
- 定義
・例1
// コンストラクタ
var Movie = function(title) {
this.title = title;
}
Movie.prototype.sayTitle = function() {
say(this.title);
}
say = function(word) {
console.log(word);
}
module.exports = Movie;
・例2
module.exports = function(title) {
this.title = title;
this.sayTitle = function() {
say(this.title);
}
}
function say(word) {
console.log(word);
}
- named exports は、幾つかの値をエクスポートするときに便利で、
インポートする側は、参照する際に同じ名前を使うことができる。
- default export は、1モジュールにつき一つの初期エクスポートで、
関数やクラス、オブジェクトなど何でも設定できるが、
requireするときにdefaultが必要になるので、ライブラリ作成には敬遠したい。
従って、ここでは、named exports の例のみ紹介。
※ AMD †
define([], function() {
return {
hello: function() {
console.log('hello');
},
goodbye: function() {
console.log('goodbye');
}
};
});
npmパッケージ †
参考 †
Qiita †