This will be pre-compiled
@@ -48,21 +48,124 @@
### サンドボックスの例
-すぐに触ってそして単一ファイルコンポーネントを試したい方は、CodeSandBox 上の [この単純な todo アプリケーション](https://codesandbox.io/s/vue-todo-list-app-with-single-file-component-vzkl3?file=/src/App.vue)
-をチェックしてみてください。
+すぐに触ってそして単一ファイルコンポーネントを試したい方は、CodeSandBox 上の [この単純な todo アプリケーション](https://codesandbox.io/s/vue-todo-list-app-with-single-file-component-vzkl3?file=/src/App.vue) をチェックしてみてください。
### JavaScript でモジュールビルドシステムが初めてなユーザ向け
`.vue` コンポーネントにより、高度な JavaScript アプリケーションの分野へ入っていきます。 これはあなたがまだ使ったことのない、いくつかの追加のツールの使い方を学ぶことを意味します:
-- **Node Package Manager (NPM)**: レジストリからパッケージを取得する方法については[Getting Started guide](https://docs.npmjs.com/packages-and-modules/getting-packages-from-the-registry) のセクションを読んでください。
+- **Node Package Manager (npm)**: レジストリからパッケージを取得する方法については[Getting Started guide](https://docs.npmjs.com/packages-and-modules/getting-packages-from-the-registry) のセクションを読んでください。
- **ES2015/16 を使ったモダンな JavaScript**: Babel の [Learn ES2015 guide](https://babeljs.io/docs/en/learn)を読んでみてください。今すぐには全ての機能を暗記する必要はないですが、参考として戻れるようにしておいてください。
-これらのリソースに没頭した後は、[Vue CLI](https://cli.vuejs.org/)を確認することをお勧めします。 指示に従うことであっという間に `.vue` コンポーネントと ES2015、 Webpack、ホットリローティングを備えた Vue プロジェクトを手に入れられるはずです!
+これらのリソースに没頭した後は、[Vue CLI](https://cli.vuejs.org/)を確認することをお勧めします。 指示に従うことであっという間に `.vue` コンポーネントと ES2015、Webpack、ホットリローティングを備えた Vue プロジェクトを手に入れられるはずです!
### 上級ユーザ向け
CLI はツールの設定の大部分の面倒を見てくれますが、[設定オプション](https://cli.vuejs.org/config/)を通してよりきめ細かいカスタマイズをすることもできます。
あなたが独自のビルドセットアップをゼロから作ることを好む場合、webpack と [vue-loader](https://vue-loader.vuejs.org)を手動で設定する必要があるでしょう。webpack についてもっと学びたいときは、[公式ドキュメント](https://webpack.js.org/configuration/)や [webpack learning academy](https://webpack.academy/p/the-core-concepts)を参照してください。
+
+### Rollup でビルド
+
+ほとんどの場合、サードパーティのライブラリを開発するときは、そのライブラリの利用者が [Tree Shaking](https://webpack.js.org/guides/tree-shaking/) できるような方法でビルドしたいと考えています。Tree Shaking を有効にするためには、`esm` モジュールをビルドする必要があります。 Webpack や Vue CLI は `esm` モジュールのビルドをサポートしていないため、[Rollup](https://rollupjs.org/) の依存が必要です。
+
+#### Rollup のインストール
+
+Rollup といくつかの依存関係をインストールする必要があります:
+
+```bash
+npm install --save-dev rollup @rollup/plugin-commonjs rollup-plugin-vue
+```
+
+これらは `esm` モジュールのコードをコンパイルするために必要な最小限の Rollup プラグインです。コードをコンパイルするために [rollup-plugin-babel](https://github.com/rollup/plugins/tree/master/packages/babel) を、ライブラリにバンドルしたい依存関係を使うならば [node-resolve](https://github.com/rollup/plugins/tree/master/packages/node-resolve) を追加できます。
+
+#### Rollup の設定
+
+Rollup でビルドを設定するには、プロジェクトのルートに `rollup.config.js` ファイルを作成する必要があります:
+
+```bash
+touch rollup.config.js
+```
+
+ファイルを作成したら、お好きなエディタで開き、以下のコードを追加します。
+
+```js
+// サードパーティのプラグインをインポート
+import commonjs from 'rollup-plugin-commonjs'
+import VuePlugin from 'rollup-plugin-vue'
+import pkg from './package.json' // 名前を再利用するために package.json ファイルをインポート
+
+export default {
+ // エクスポートされたすべてのコンポーネントや関数を含むファイル
+ input: 'src/index.js',
+ // 出力されるフォーマットの配列
+ output: [
+ {
+ file: pkg.module, // esm ライブラリの名前
+ format: 'esm', // フォーマットの選択
+ sourcemap: true, // ソースマップを含めるか
+ }
+ ],
+ // 含めるプラグインの配列
+ plugins: [
+ commonjs(),
+ VuePlugin()
+ ],
+ // ライブラリに Vue をバンドルしないように
+ external: ['vue']
+}
+```
+
+#### package.json の設定
+
+新しく作成した `esm` モジュールを利用するためには、`package.json` ファイルにいくつかのフィールドを追加する必要があります:
+
+```json
+ "scripts": {
+ ...
+ "build": "rollup -c rollup.config.js",
+ ...
+ },
+ "module": "dist/my-library-name.esm.js",
+ "files": [
+ "dist/",
+ ],
+ ```
+
+ここでは、以下の内容を指定しています:
+
+- パッケージのビルド方法
+- パッケージにバンドルするファイル
+- `esm` モジュールを示すファイル
+
+#### `umd` と `cjs` のバンドル
+
+`umd` と `cjs` モジュールを一緒にビルドするには、`rollup.config.js` と `package.json` に数行の設定を追加するだけです。
+
+##### rollup.config.js
+```js
+output: [
+ ...
+ {
+ file: pkg.main,
+ format: 'cjs',
+ sourcemap: true,
+ },
+ {
+ file: pkg.unpkg,
+ format: 'umd',
+ name: 'MyLibraryName',
+ sourcemap: true,
+ globals: {
+ vue: 'Vue',
+ },
+ },
+]
+```
+##### package.json
+```json
+"module": "dist/my-library-name.esm.js",
+"main": "dist/my-library-name.cjs.js",
+"unpkg": "dist/my-library-name.global.js",
+```