Rollup で axios をブラウザ用にバンドルする方法。
さきに結論から言うと、以下のような設定でバンドルできます。
rollup.config.js
import resolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; import replace from 'rollup-plugin-replace'; export default { input: 'script.js', output: { file: 'bundle.js', format: 'iife' }, plugins: [ resolve({ browser: true }), commonjs(), replace( { 'process.env.NODE_ENV': JSON.stringify('production') }) ] }
script.js
import axios from 'axios'; axios.get('https://api.zipaddress.net?zipcode=900-0012').then(function(data) { console.log(data); });
説明
axios を Rollup でバンドルするには以下の3つのプラグインが必要になります。
-
rollup-plugin-node-resolve
-
rollup-plugin-commonjs
-
rollup-plugin-replace
まず node_modules
から axios を取得するために rollup-plugin-node-resolve
が必要となります。
次に、 axios は CommonJS 形式で書かれたいるため、それを読み込むために rollup-pllugin-commonjs
がいります。
そして最後に、 axios 内には process.env.NODE_ENV
が出てきますが、Rollup では process
オブジェクトを扱わないのでそれを置換するために rollup-plugin-repalce
がそれぞれ必要となっています。
もう一つ重要なのが、ブラウザ用にバンドルする場合は rollup-plugin-node-resolve
の設定で browser
を true
に設定する必要があります。
resolve({ browser: true }),
これによって axios の package.json
内にある browser
フィールドが読み込まれ、適切なファイルがバンドルされるようになります。