Svelte を使う時に Rollup を初めて触ったのだけど、
色々パッケージを入れてしっかりビルドできるまで調べるのに時間がかかった。
ので軽いメモ。
Svelte とは
Svelte 以外に npm でインストールしたパッケージ
エラーが解決できず、インストールを断念したパッケージ
rollup.config.js で出た主なエラー (ビルドエラー)
- rollup/rollup-plugin-json で解決
- Error: Unexpected token (Note that you need rollup-plugin-json to import JSON files)
- calvinmetcalf/rollup-plugin-node-builtins で解決
- Missing shims for Node.js built-ins
- パッケージ毎に解決策が違う
- Unresolved dependencies
- Missing global variable names
- Circular dependency
- Use output.globals to specify browser global variable names corresponding to external modules
request (guessing 'request')
bundle.js で出た主なエラー (ブラウザエラー)
- パッケージ毎に解決策が違う
- process is not defined xxxxx
- Failed to construct 'Request': Please use the 'new' operator, this DOM object constructor cannot be called as a function.
- request/request (HTTP Client) を導入しようとして発生。 babel など試したけど、解決できなかった。
解決まで
パッケージ毎に解決策が違っていて「ここを修正すれば全てが解決」というわけにもいかなかった。
解決できる範囲が狭いこともあり、情報も少なかったので時間がかかった。
基本的にはパッケージ先の github の isuue を検索したり README.md を見て解決した。
例えば axios を導入していた時に見ていたページ
Rollup の修正
$ cd /path/to/your/project
$ npm install --save-dev rollup-plugin-json
$ npm install --save-dev rollup-plugin-node-builtins
$ npm install --save-dev rollup-plugin-node-globals
- rollup/rollup-plugin-json
- calvinmetcalf/rollup-plugin-node-builtins
- calvinmetcalf/rollup-plugin-node-globals
- rollup/rollup-plugin-node-resolve
rollup.config.js
$ vi rollup.config.js
import svelte from 'rollup-plugin-svelte';
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
import livereload from 'rollup-plugin-livereload';
import { terser } from 'rollup-plugin-terser';
// 下記追加インポート
import globals from 'rollup-plugin-node-globals';
import builtins from 'rollup-plugin-node-builtins';
import json from 'rollup-plugin-json';
const production = !process.env.ROLLUP_WATCH;
export default {
input: 'src/main.js',
output: {
sourcemap: true,
format: 'iife',
name: 'app',
file: 'public/bundle.js',
},
plugins: [
svelte({
dev: !production,
css: css => {
css.write('public/bundle.css');
}
}),
resolve({ browser: true }),// browser: true 追加
commonjs(),
!production && livereload('public'),
production && terser(),
// 下記追加
builtins(),
globals(),
json(),
],
};