Skip to content

feat(usecase): モジュール #505

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 14 commits into from
Jul 27, 2018
Merged

feat(usecase): モジュール #505

merged 14 commits into from
Jul 27, 2018

Conversation

lacolaco
Copy link
Collaborator

@bot-user
Copy link

bot-user commented Jun 25, 2018

Deploy preview for js-primer ready!

Built with commit 3177013

https://deploy-preview-505--js-primer.netlify.com

@lacolaco
Copy link
Collaborator Author

わかっていたけど、どこまで書いてどこまで書かないのかの判断が難しい…

@lacolaco
Copy link
Collaborator Author

fromの先のパス解決は実装に依存する、というのは書かないとダメかな。そうなるとブラウザとNode.jsの比較は最後に持っていったほうがいいのかな。でもNodeのESM対応はまだ書きたくないな…

@lacolaco
Copy link
Collaborator Author

ちがうかなーまずずっとESModuleの構文について触れて、最後に実行環境とモジュールシステムについて話す感じかな。commonjsの構文はnodecliのほうに任せて、Node.jsにはcommonjsがあって、ESModuleまだ実装されてないよ、っていう話と、バンドラによってモジュールシステムが変わるから気をつけなきゃダメだよっていう話か

@azu
Copy link
Collaborator

azu commented Jun 26, 2018

歴史的経緯:

現実的な理由:

  • ブラウザにはファイルシステムがない
  • Node.jsにはURLでモジュールを読むのは一般的ではなかった
  • => loader部分は共通のECMAScriptとして定義しにくそう

@teppeis 本(Web+DB vol87)では

  • CommonJS、AMDがあるという歴史的経緯
  • ES6 modulesの構文紹介
  • hoisting, strict modeになる話
  • 各ホスト環境での読み込み方法
  • Transpiler系での使い方

http://exploringjs.com/es6/ch_modules.html も比較的似た流れ。
(Todoアプリでも https://asciidwango.github.io/js-primer/use-case/todoapp/entrypoint/#entrypoint スコープの話をしてた。)

はじめてのJavaScriptは時期的に入ってない感じ?(node_moduleだけ?)

@azu
Copy link
Collaborator

azu commented Jun 26, 2018

Node.jsにはcommonjsがあって、ESModuleまだ実装されてないよ

(実装はされてフラグで使えるけど、)まだまだStableじゃないよ(安定ってより一般的じゃないよというニューアンス) だからここでは書かないよ的なことがわかればいい気はする。

@lacolaco
Copy link
Collaborator Author

lacolaco commented Jul 2, 2018

@azu とりあえずざっと書けたんですが、lint回りでけっこう苦しいことになっているので助けてもらいたいです...

Copy link
Collaborator

@azu azu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

今日明日ぐらいで見ます。


まずは`export`文について見ていきましょう。

### export文` {#export-syntax}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

` がなぞに残ってる

@azu
Copy link
Collaborator

azu commented Jul 3, 2018

importがNode VMがパースできずにだめになるパターンか。
esmか --experimental-modules を使って解決できるかな?

@lacolaco
Copy link
Collaborator Author

lacolaco commented Jul 3, 2018

あと、コードを分けて解決しているけど、同じコード例中で2回defaultエクスポートできないのがけっこう面倒ですね

@azu
Copy link
Collaborator

azu commented Jul 4, 2018

es moudleのテストってちゃんとimport/exportできてるかぐらいがわかればいい気がする。

  • import系 実際に読み込んでエラーが起きない
    • これがいまはない
  • export系 別途テストからimportする

の2系統があればよさそう。
markdown-doc-test.js みたいな既存のテストパスには乗らない感じがする。

  • テストしたいものは全部のファイルにして([import](./file)しておく)
  • import("./myModule.js") してるやつはその位置にちゃんとファイルが存在するようにする

ができれば後からなんとかなりそう。
(こうすれば、markdown-doc-test.js は何もしないし、 *-example.js とかつけなければ実行されないので、とりあえずはテスト通るはず)

後でmodule用のテストの仕組みを追加する感じになりそう

Copy link
Collaborator

@azu azu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#505 (comment)
にも書いたけど、テストの仕組みは追加するしかなさそう。
とりあえず、必要な部分は全部ファイルになってればコードを[import]すれば、パースエラーとかにはならないのでCIは通せるかな

# モジュール {#module}

この章では **ECMAScriptモジュール(ESモジュール、JSモジュールとも呼ばれる)** について見ていきます。
ECMAScriptモジュールは、JavaScriptファイルをモジュールとして扱うための機能です。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

モジュールとは何かというのを簡単に説明した方がよさそう。
(モジュールという概念自体が曖昧なままだとよくわからない話に見えそう)

JavaScriptでのモジュールは、機能をエクスポートしたJavaScriptのファイル、モジュールから機能をインポートしたファイルどちらもモジュールと読んでる。
たとえば、あるxxxという関数を書いて、それを別のところでも使いたいとなったときに、コピペで持ってくるより、モジュールとして再利用できるのでメンテンス性がいいよとかそういうイメージできる何かが最初にあるとよさそう。

なんかキーワードは思いつくけど文章として難しいな

  • 再利用性
  • 名前空間: モジュール内はスコープが別れてるから、モジュール直下にコードを書いてもグローバルにはならない
  • 1ファイル = 1モジュール?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

疎結合化とテスト可能性とか

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

コピペするとバージョン管理が大変という話も動機として上げていいのでは


## ESモジュール {#es-modules}

ESモジュールは、ECMAScriptの`import`、`export`構文を使って記述されるモジュールの形式です。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ECMAScriptのimportexport構文を使って記述されるモジュールの形式です。

import, export がなくてもモジュールなので、ここは何か冗長な感じがする。

ESモジュールは、[export文][]によって変数や関数などのシンボルできます。
また、[import文][]を使って別のモジュールからインポートできます。

とか

## ESモジュール {#es-modules}

ESモジュールは、ECMAScriptの`import`、`export`構文を使って記述されるモジュールの形式です。
[export文][]によって外部にエクスポートされた変数や関数などのシンボルを、[import文][]を使って別のモジュールからインポートできます。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

シンボル

シンボルって何かが説明されてない感じがする?
(Symbolと勘違いもしそう)
シンボルって表現初めてみた気がするけどこれ仕様とかでそうなってたの?

使うなら最初のところで「〜をシンボルと呼びます」とかが必要そう。

ESモジュールは、ECMAScriptの`import`、`export`構文を使って記述されるモジュールの形式です。
[export文][]によって外部にエクスポートされた変数や関数などのシンボルを、[import文][]を使って別のモジュールからインポートできます。

まずは`export`文について見ていきましょう。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ここ若干の飛躍があって、おそらくここに入る前に、モジュールでは名前空間が別れてるという概念の説明が入りそうな気がする。
export/importできるけど、なぜするのかがよくわからない状態になってそう(グローバル変数ではだめなの?とか)

### export文 {#export-syntax}

`export`文は変数や関数などのシンボルをエクスポートし、別のモジュールから参照できるようにします。
エクスポートの方法は、名前付きとデフォルトの2種類があります。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

エクスポートの方法は、名前付きエクスポートとデフォルトエクスポートの2種類があります。

正式名称で書いて良さそう。

import { foo as myModuleFoo } from "./myModule.js";
```

すべての名前付きエクスポートをまとめてインポートするための、`import * as`という構文もあります。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

これ、セクション分けても良さそうな気がする。
なんていうんだろ?
NameSpaceImport?

// 名前付きエクスポートされたfooをインポートする
import myModuleDefault, { foo } from "./myModule.js";
```

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

この辺に、エクスポートされてないシンボルをインポートするとどうなるかというのも書けるかも?
ES moduleは静的に解決されるので、存在しないものをインポートしたら、パースエラーになる?

スクリプトとして読み込まれたJavaScriptで`import`文や`export`文を使用すると、シンタックスエラーが発生します。

また、インポートされるモジュールの取得はネットワーク経由で解決されます。
そのため、モジュール名はJavaScriptファイルの絶対URLあるいは相対URLを指定します。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

詳しくはTodoアプリのユースケースでってリンクかな


作成したESモジュールを実行するためには、起点となるJavaScriptファイルをESモジュールとしてWebブラウザに読み込ませる必要があります。
Webブラウザは`script`タグによってJavaScriptファイルを読み込み、実行します。
次のように`script`タグに`type="module"`という属性を付与すると、WeブラウザはJavaScriptファイルをESモジュールとして読み込みます。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Weブラウザ

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

type="module"という属性を付与すると

というは省いていいかな

const myModule = require("./myModule.js");
```

Node.jsではESモジュールもサポートする予定ですが、現在はまだ安定した機能としてサポートされていません。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

詳細はCLIのところでってリンク

# モジュール {#module}

この章では **ECMAScriptモジュール(ESモジュール、JSモジュールとも呼ばれる)** について見ていきます。
ECMAScriptモジュールは、JavaScriptファイルをモジュールとして扱うための機能です。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

疎結合化とテスト可能性とか


## ESモジュールを実行する {#run-es-modules}

作成したESモジュールを実行するためには、起点となるJavaScriptファイルをESモジュールとしてWebブラウザに読み込ませる必要があります。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ブラウザとは(近い将来)限らないはずなので、なにか別の表現を探したい

# モジュール {#module}

この章では **ECMAScriptモジュール(ESモジュール、JSモジュールとも呼ばれる)** について見ていきます。
ECMAScriptモジュールは、JavaScriptファイルをモジュールとして扱うための機能です。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

コピペするとバージョン管理が大変という話も動機として上げていいのでは


JavaScriptにおけるモジュールは、保守性・名前空間・再利用性のために使われます。

* 保守性: 依存性の高いコードの集合を一ヶ所にまとめ、それ以外のモジュールへの依存性を減らすことができます
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

一ヶ所一箇所が全体で揺れてるけど、prhどっちに寄せるべきか

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lacolaco lacolaco changed the title WIP feat(usecase): モジュール feat(usecase): モジュール Jul 5, 2018
@lacolaco
Copy link
Collaborator Author

lacolaco commented Jul 7, 2018

なぜかnetlifyのデプロイが落ちてる

@azu
Copy link
Collaborator

azu commented Jul 7, 2018

cache消してdeployしなおしてみたけど、なんか変な原因でコケてるな

Error: Couldn't locate plugins "include-codeblock, anchors, js-console, github-issue-feedback, todo, highlight, sharing, fontsettings, theme-default", Run 'gitbook install' to install plugins from registry.

@azu
Copy link
Collaborator

azu commented Jul 7, 2018

別PR作ってもコケているので、Netlifyが何かおかしいか。
Node 8.11.3だとおかしいとかそういう系な感じがする
#513

@lacolaco
Copy link
Collaborator Author

lacolaco commented Jul 7, 2018

NODE_VERSIONを8.10.0にしてみたけど変わらずでした
https://app.netlify.com/sites/js-primer/deploys/5b400d9402ed836c44d9110b

@azu
Copy link
Collaborator

azu commented Jul 7, 2018

workboxがコケるのは npm/hosted-git-info#35 だった。
手元だと gitbook の方はクリーンインストールでも通るのがなぞい

追記: Netlifyは勝手に治ったっぽい

Copy link
Collaborator

@azu azu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

構文の所までをもう一度見た。

スコープの説明どうするかなー

* 名前空間: モジュールごとに分かれたスコープがあり、グローバルの名前空間を汚染しません
* 再利用性: 便利な変数や関数を複数の場所にコピーアンドペーストせず、モジュールとして再利用できます

JavaScriptのモジュールはひとつのJavaScriptファイルに対応します。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

対応関係的に

ひとつのJavaScriptのモジュールはひとつのJavaScriptファイルに対応します。


`export`文は変数や関数などをエクスポートし、別のモジュールから参照できるようにします。
エクスポートの方法は、 **名前付きエクスポート** と **デフォルトエクスポート** の2種類があります。
名前付きエクスポートは、モジュールごとに複数持てます。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

持てます。

持つだとなんか変な気がするから、

  • 複数かけます
  • 複数エクスポートできます
  • 複数の変数や関数などをエクスポートできます
  • 複数定義できます
  • 複数回書けます

MDNのはモジュールが主語だと訳がおかしい。

You can have multiple named exports per module but only one default export.
export - JavaScript | MDN

[import, exportExample.js](src/export-default-1.js)

また、次のように宣言とエクスポートを同時に行うことができます。
ただし、関数とクラスに限られます。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ここの説明

という関係が微妙にわかりにくい気がする。

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ただし、関数とクラスに限られます。

ただし、宣言と同時にエクスポートできるのは関数とクラスに限られ、変数宣言は構文エラーとなります。
変数宣言は、カンマ区切りで複数の変数を定義できてるため。そのため、名前付きエクスポートとは異なりデフォルトエクスポートでの変数宣言はできません。

文で説明すると長い

また、次のように関数とクラスは宣言とデフォルトエクスポートを同時に行うことができます。
....コード
ただし、変数宣言は宣言とデフォルトエクスポートを同時に行うことはできません。
なぜなら、変数宣言はカンマ区切りで複数の変数を定義できてしまうためです。
...だめなコード例

みたいにするとか?

Copy link
Collaborator

@azu azu Jul 7, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

また、次のように宣言とエクスポートを同時に行うことができます。
ただし、関数とクラスに限られます。

多分なんとなくくる違和感は、

  • XXX できます
  • ただし、<できる対象>だけです

というみたいな順番になっているのが原因な気がする。(後ろも読まないとできるのが誰かわからないし、逆にできないのは誰かが暗黙的になってる)

### import文 {#import-syntax}

`import`文は、別のモジュールからエクスポートされた変数や関数などを自身のモジュールにインポートします。
インポートした変数や関数は、そのモジュール内で宣言されたものと同じように扱えます。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

- インポートした変数や関数は、そのモジュール内で宣言されたものと同じように扱えます。
+ インポートした変数や関数は、そのモジュールの先頭で宣言されたものと同じように扱えます。

としてhoistingの説明を避けるか、hoistingの説明をするかかな。

        console.log(App);
        import {App} from "./src/App.js"

hoisting自体の説明は一応されてるけど、どこに書いても先頭に書いたのと同じになるから、イメージ的には先頭でimportしろというのが伝わればいいかなーと思う。
https://asciidwango.github.io/js-primer/basic/function-scope/#hoisting-var


#### 名前付きインポート {#named-import}

名前付きインポートは、指定したモジュールがもつ名前付きエクスポートをインポートします。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

名前付きインポートは、指定したモジュールがもつ名前付きエクスポートをインポートします。

うしろで import { default as } をだしてるから、なんか違和感あるかも。

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

名前付きインポートは、指定したモジュールから名前を指定してインポートします

としか言いようがない感じはする。
こう書くと次の行とぶつかる。
やっぱり、named importとnamespace importは分けたほうがいい気がする。

分けてるケース:


[import, importExample.js](src/import-2.js)

もうひとつの方法は、すべての名前付きエクスポートをまとめてインポートする`import * as`構文です。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

これを"すべてインポート"みたいな感じで分けたほうがいい気がする。
あと、default も含めてインポートされない?

image

import * as all from "../src/myModule.js";

console.log(all);

#### デフォルトインポート {#default-import}

デフォルトインポートは、指定したモジュールのデフォルトエクスポートをインポートします。
デフォルトインポートには、専用の構文を使う方法と、名前付きインポートと同じ構文を使う方法の2つがあります。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

名前付きインポートと同じ構文を使う方法の2つがあります。

具体的に 名前付きインポートでdefaultを指定する方法の2つがあります。

とかでもよさそう。

ESモジュールでは、エクスポートされていないものはインポートできません。
デフォルトインポートは指定したモジュールがデフォルトエクスポートをもっている必要があります。
同様に、名前付きインポートは指定した名前の名前付きエクスポートをもっている必要があります。
ESモジュールはJavaScriptのパース段階で解決されるため、対象が存在しないインポートはパースエラーを起こします。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

パース段階で解決されるため

パース段階で依存関係が解決されるため

とか(循環参照が許容されるのはたしかこれが理由)


#### 付随効果のためのインポート {#import-for-side-effect}

モジュールの中には、グローバルのコードを実行するだけで何もエクスポートしないものがあります。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

モジュールの中には、グローバルのコードを実行するだけで何もエクスポートしないものがあります。

具体的に説明ないとピンとこなさそう。

付随効果 は 副作用のための とかでいい気がする。

[import, importExample.js](src/import-default-3.js)

ESモジュールでは、エクスポートされていないものはインポートできません。
デフォルトインポートは指定したモジュールがデフォルトエクスポートをもっている必要があります。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

- デフォルトエクスポートをもっている
+ デフォルトエクスポートをしている

じゃないかな。


ESモジュールでは、エクスポートされていないものはインポートできません。
デフォルトインポートは指定したモジュールがデフォルトエクスポートをもっている必要があります。
同様に、名前付きインポートは指定した名前の名前付きエクスポートをもっている必要があります。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

どうように

- 名前付きエクスポートをもっている
+ 名前付きエクスポートをしている

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

デフォルトインポートと対にしたいので、

デフォルトインポートは、指定したモジュールがデフォルトエクスポートをしている必要があります。
同様に名前付きインポートは、指定したモジュールが指定した名前付きエクスポートをしている必要があります。

ESモジュールでは、エクスポートされていないものはインポートできません。
デフォルトインポートは指定したモジュールがデフォルトエクスポートをもっている必要があります。
同様に、名前付きインポートは指定した名前の名前付きエクスポートをもっている必要があります。
ESモジュールはJavaScriptのパース段階で依存関係が解決されるため、対象が存在しないインポートはパースエラーを起こします。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

対象が存在しないインポートはパースエラーを起こします。

"対象" が少し曖昧な感じはする。

  • ファイルパス
  • エクスポートされてない名前

の2つが対象?
パースエラーになるのは エクスポートされてない名前 ?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

このパラグラフの先頭で

ESモジュールでは、エクスポートされていないものはインポートできません。

と言っているので、この文は同じことを半分言っているけど、微妙に離れてるのが気になる。

  • 事実:
    • ESモジュールでは、エクスポートされていないものはインポートできません。
    • 対象が存在しないインポートはパースエラーを起こします。
  • 理由:
    • ESモジュールはJavaScriptのパース段階で依存関係が解決されるため

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ESモジュールでは、エクスポートされていないものはインポートできません。
なぜならESモジュールはJavaScriptのパース段階で依存関係が解決され、インポートする対象が存在しない場合はパースエラーとなるためです。
そのためデフォルトインポートは、指定したモジュールがデフォルトエクスポートをしている必要があります。
同様に名前付きインポートは、指定したモジュールが指定した名前付きエクスポートをしている必要があります。

とかかな?
もうちょっと短くできるといい気もするけど。

@@ -0,0 +1,3 @@
const _foo = "foo";
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

_internelFoo とかどっちがいいかな?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

internalで

モジュールの中には、グローバルのコードを実行するだけで何もエクスポートしないものがあります。
たとえば次のような、グローバル変数を操作するためのモジュールなどです。

[import, sideEffect.js](src/sideEffect.js)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

import-side-effects.js?のパスミス

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

これは存在するファイルです

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sideEffects.js だった

## CommonJSモジュール {#commonjs-module}

[CommonJSモジュール][]とは、[Node.js][]環境で利用されているモジュール化の仕組みです。
ESモジュールの仕様が策定されるよりもずっと古くから使われており、Node.jsの標準パッケージや[NPM][]で配布されるサードパーティパッケージは、ほぼすべてCommonJSモジュールとして提供されています。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ほぼすべてCommonJSモジュールとして提供されています。

CommonJSモジュールとして提供されていることがほとんどです。

どっちが柔らかい感じかで迷った。

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mjs が増える未来もあり得なくないので、少し柔らかい感じでもいいかなと思った。

結果として、Node.js向けでないアプリケーションのソースコードもモジュール化することが一般的になり、
モジュールバンドラーはJavaScript開発において無くてはならないものになりました。

現在では、CommonJSだけでなくESモジュールにも対応したモジュールバンドラーがいくつも登場しています。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

現在って表現は脆くなりがちなので省いてもよさそう。

CommonJSだけでなくESモジュールにも対応したモジュールバンドラーがいくつも登場しています。

これ自体は事実なので、

モジュールバンドラーにはCommonJSだけでなくESモジュールにも対応したものもあります。
また、バンドルする際にJavaScriptコードの最適化を行うなどバンドル以外の機能を持つものもあります。
[JavaScriptモジュールについてのドキュメント][]では、
+WebにおけるJavaScriptのモジュールと、バンドルする目的などについて詳しくまとめられています。

ぐらいな感じでいいんじゃないかな。
(最適化 ∋ 軽量化 だと思うので)

Copy link
Collaborator

@azu azu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ほかはLGTM

モジュールバンドラーにはCommonJSだけでなくESモジュールにも対応したものもあります。
また、バンドルする際にJavaScriptコードの最適化を行うなどバンドル以外の機能をもつものもあります。
[JavaScriptモジュールについてのドキュメント][]では、
+WebにおけるJavaScriptのモジュールと、バンドルする目的などについて詳しくまとめられています。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+が入ってる

@lacolaco
Copy link
Collaborator Author

レビューありがとうございます 修正してmergeします

@lacolaco
Copy link
Collaborator Author

なんかwebhook飛んでないな

@lacolaco lacolaco merged commit 8626bb4 into master Jul 27, 2018
@lacolaco lacolaco deleted the module-section branch July 27, 2018 13:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants