ES 6学習ノート-Moduleの文法
14024 ワード
1.exportコマンド
export var m=1;
functionとclassの出力
export function f(){};
var m=1;
export {m};
functionとclassの出力
function f(){};
export {f};
比較的多くの変数がある場合は、このように書くことができます.
var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;
export {firstName, lastName, year};
var n=1;
export {n as m};
比較的多くの変数がある場合
function v1() { ... }
function v2() { ... }
export {
v1 as streamV1,
v2 as streamV2,
v2 as streamLatestVersion
};
//
export 1;
//
var m=1;
export m;
//
function f(){}
export f;
2.importコマンド
// main.js
import {firstName, lastName, year} from './profile';
function setName(element) {
element.textContent = firstName + ' ' + lastName;
}
import { lastName as surname } from './profile';
foo();
import {foo} from 'my_module';
3.モジュール全体のロード
出力値のロードを指定するだけでなく、全体のロード、すなわちアスタリスク(*)でオブジェクトを指定し、すべての出力値をこのオブジェクトにロードすることもできます.
import * as circle from './circle';
//area() circumference() circle ,* area() circumference() 。
console.log(' :' + circle.area(4));
console.log(' :' + circle.circumference(14));
モジュール全体がロードされているオブジェクト(前例はcircle)は、静的に分析できるはずなので、実行時の変更は許可されません.以下の書き方はすべて許されません.
import * as circle from './circle';
//
circle.foo = 'hello';
circle.area = function () {};
4.export defaultコマンド
上記の例から分かるように、importコマンドを使用するには、ロードする変数名または関数名を知る必要があります.ユーザーがドキュメントを読まずにモジュールをロードできるようにするには、
export default
コマンドを使用します.export default
書き方// export-default.js
export default function foo() {
console.log('foo');
}
//
function foo() {
console.log('foo');
}
export default foo;
import
コマンドの後にカッコを使用する必要はありません.デフォルト出力と通常出力の比較//
export default function crc32() {};
//
import crc32 form 'crc32';
//
export function crc32(){};
//
import {crc32} from 'crc32';
export default function (obj) {
// ···
}
export function each(obj, iterator, context) {
// ···
}
import _, { each } from 'lodash';
export default
はクラス// MyClass.js
export default class { };
// main.js
import MyClass from 'MyClass';
let o = new MyClass();
5.exportとimportの複合表記
export { foo, bar } from 'my_module';
//
import { foo, bar } from 'my_module';
export { foo, bar };
//
export { foo as myFoo } from 'my_module';
//
export * from 'my_module';
export { default } from 'foo';
export { es6 as default } from './someModule';
//
import { es6 } from './someModule';
export default es6;
export { default as es6 } from './someModule';
6.モジュールの継承
circleplusモジュールがcircleモジュールを継承していると仮定します.
// circleplus.js
export * from 'circle';
export var e = 2.71828182846;
export default function(x) {
return Math.exp(x);
}
上のコードのexportは、circleモジュールのすべての属性と方法を再出力することを示しています.注意、exportコマンドはcircleモジュールのdefaultメソッドを無視します.次に、上記のコードは、カスタムe変数とデフォルトメソッドを出力します.
上のモジュールをロードする書き方は次のとおりです.
// main.js
import * as math from 'circleplus';
import exp from 'circleplus';
console.log(exp(math.e));
上のコードのimport expは、circleplusモジュールのデフォルトメソッドをexpメソッドにロードすることを示します.
7.モジュール間変数
const宣言の定数は、現在のコードブロックでのみ有効です.モジュール間定数(すなわち、複数のファイル間)を設定したり、1つの値を複数のモジュールで共有したりする場合は、次のように書くことができます.
// constants.js
export const A = 1;
export const B = 3;
export const C = 4;
// test1.js
import * as constants from './constants';
console.log(constants.A); // 1
console.log(constants.B); // 3
// test2.js
import {A, B} from './constants';
console.log(A); // 1
console.log(B); // 3
使用する定数が非常に多い場合は、専用のconstantsディレクトリを作成し、さまざまな定数を異なるファイルに書き、そのディレクトリの下に保存することができます.
// constants/db.js
export const db = {
url: 'http://my.couchdbserver.local:5984',
admin_username: 'admin',
admin_password: 'admin password'
};
// constants/user.js
export const users = ['root', 'admin', 'staff', 'ceo', 'chief', 'moderator'];
その後、これらのファイルの出力定数をindexにマージする.jsの中.
// constants/index.js
export {db} from './db';
export {users} from './users';
使用するときはindexを直接ロードします.jsでいいです.
// script.js
import {db, users} from './constants';
8. import()
import
コマンドは、JavaScriptエンジンによって静的に解析され、モジュール内の他のモジュールより先に実行されます(「接続」と呼ばれます.したがって、次のコードはエラーを報告します.//
if (x === 2) {
import MyModual from './myModual';
}
上記のコードでは、エンジンがimport文を処理するのはコンパイル時であり、if文を分析したり実行したりしないため、import文をifコードブロックに置くのは意味がないため、実行時エラーではなく文法エラーを報告します.すなわち、importコマンドとexportコマンドは、モジュールの最上位にのみ使用でき、コードブロック(ifコードブロック、関数など)には使用できません.
requireはランタイムロードモジュールであるため、importコマンドはrequireのダイナミックロード機能に取って代わることはできません.
const path = './' + fileName;
const myModual = require(path);
上の文はダイナミックロードで、requireがどのモジュールをロードするかは、実行時にしかわかりません.import文ではできません.
そこで,import()関数を導入し,動的ロードを完了することを提案する.