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 フィールドが読み込まれ、適切なファイルがバンドルされるようになります。