Parcel のどうということはない小技集
Parcel のどうということはない小技集:
Parcel で LP のような簡単なページを作る際に役立つかもしれない TIPS をまとめてみました。
私のサイトのトップページがまさに Parcel なんですが、機能もへったくれもないので、そういうのを求めている方向けではありません。
Parcel でビルドすると
これはもちろんキャッシュ対策であって正しい挙動なんですが、いやそんな残さんでええよ?という時は
案件が軌道に乗ったら「キャッシュを消すビルドコマンド」と「消さないビルドコマンド」の二つに分けて運用すると良いかもしれません。
なお、こちらによると
Parcel は何でもかんでも dist フォルダにファイルをビルドしちゃいますが、 index.html だけ上の階層に移動したい、というケースがあるかもしれません。私はありました。
しかし Parcel にそんな気の利いた機能はないので、
が、そのままだと index.html 内部の相対パスが壊れてしまうため、ビルドする際には
例えば、
ちなみに
どこにでもある情報ですが、
( Parcel には Auto-install 機能があるので、手動で npm install するのは避けた方が良いかな、と。)
ちなみに Normalize CSS や Reset CSS を使いたい時は
上二つの Sass 版を使いたい場合は
これもどこにでもある情報ですが、 package.json と同階層に
やっぱりどこにでもある情報ですが、 package.json と同階層に
お察しの通り、拡張子を
こちらも npm install は不要です。
JavaScript で
テンプレートエンジンを使わない場合は直に書けば良いのですが、 Vue を使っている場合は
ページが複数ある場合は
Vue Router も設定できます…が、 SPA で Parcel を使うのが適切かどうか怪しいので割愛します。
Parcel は便利なんですが、かゆいところに手が届かなくてやきもきしますね。ゼロコンフィグの宿命でしょうけど。
あと、いつまでたっても公式ドキュメントに空のページがある… Asset Types の Vue とか。ちょっと不安です。
とはいえゼロコンフィグなバンドラという点ではメジャーな代替ツールもないようなので、期待はしています。
概要
Parcel で LP のような簡単なページを作る際に役立つかもしれない TIPS をまとめてみました。私のサイトのトップページがまさに Parcel なんですが、機能もへったくれもないので、そういうのを求めている方向けではありません。
小技
古いビルドファイルを削除する
Parcel でビルドすると top.44a62113.js, top.9666360a.js, ...
というふうに古いファイルが際限なく残り続けます。これはもちろんキャッシュ対策であって正しい挙動なんですが、いやそんな残さんでええよ?という時は
rm
コマンドを npm-scripts の prebuild
かビルドコマンドの前に書くと良さげです。"scripts": { "build": "rm dist/top/* ; parcel build ..." }
なお、こちらによると
parcel-plugin-clean-dist
とか parcel-plugin-clean-easy
というプラグインもあるようですが、使う必要あるんでしょうか?わかりません。
index.html を一階層上に移動する
Parcel は何でもかんでも dist フォルダにファイルをビルドしちゃいますが、 index.html だけ上の階層に移動したい、というケースがあるかもしれません。私はありました。しかし Parcel にそんな気の利いた機能はないので、
mv
コマンドで移動する必要があります。が、そのままだと index.html 内部の相対パスが壊れてしまうため、ビルドする際には
--public-url
オプションを付ける必要もあります。例えば、
/top/index.html
を /index.html
に移動したい場合は以下のようになるかと。"scripts": { "dev": "parcel ./src/*.html --no-cache --no-source-maps --out-dir dist/top --target browser", "build": "parcel build ./src/*.html --no-cache --no-source-maps --out-dir dist/top --public-url ./top --target browser && mv dist/top/index.html dist/index.html" }
parcel ./src/index.html
とした場合は http://localhost:1234/
でページが表示されますが、 parcel ./src/*.html
とワイルドカードを使った場合は http://localhost:1234/index.html
と明示的にファイル名を指定しなければページは表示されません。
Sass を使う
どこにでもある情報ですが、 .scss
ファイルを JavaScript で import して Parcel を走らせれば自動的に sass
パッケージが読み込まれ、 CSS に変換されます。( Parcel には Auto-install 機能があるので、手動で npm install するのは避けた方が良いかな、と。)
import './index.scss'
npm i --save normalize.css reset-css
で手動インストールし、 JavaScript で import すれば OK です。import 'normalize.css' import 'reset-css'
npm i --save normalize-scss reset-css
してから Sass で import する必要がある、のかな? Parcel 関係ないけど。@import '../node_modules/normalize-scss/sass/normalize'; @include normalize(); @import '../node_modules/reset-css/sass/reset';
Autoprefixer を使う
これもどこにでもある情報ですが、 package.json と同階層に postcss.config.js
を作り、以下のようなコードを書けば autoprefixer
がインストールされ、プリフィクスが付与されます。module.exports = { plugins: { autoprefixer: { browsers: [ 'cover 99.5%' ] } } }
Babel を使う
やっぱりどこにでもある情報ですが、 package.json と同階層に .babelrc
を作り、以下のようなコードを書けば babel-core
と(上記の例では) babel-preset-env
がインストールされるので楽ちんです。{ "presets": [ [ "env", { "targets": { "browsers": [ "> 0.1%" ] } } ] ] }
テンプレートエンジンを使う
Pug (Jade)
お察しの通り、拡張子を .pug
にすれば自動的に pug
がインストールされ、使えるようになります。
Vue
こちらも npm install は不要です。JavaScript で
import Vue from 'vue'
などと書けば vue
と関連プラグインがインストールされます。import Vue from 'vue' import Footer from './footer.vue' new Vue({ el: '#footer', render: h => h(Footer) })
Google Analytics を( Vue で)使う
テンプレートエンジンを使わない場合は直に書けば良いのですが、 Vue を使っている場合は vue-analytics
を使うと便利です。これも Parcel 関係ありませんが…。npm i --save vue-analytics
で手動インストール後、任意の箇所に下記コードを記述するだけ。import Vue from 'vue' import VueAnalytics from 'vue-analytics' Vue.use(VueAnalytics, { id: 'UA-XXXXXXXXXX-X' }) // �� TODO: ここ変えて Vue.$ga.page()
Vue.$ga.page({ page: window.location.pathname })
などとすると良いでしょう。Vue Router も設定できます…が、 SPA で Parcel を使うのが適切かどうか怪しいので割愛します。
おわりに
Parcel は便利なんですが、かゆいところに手が届かなくてやきもきしますね。ゼロコンフィグの宿命でしょうけど。あと、いつまでたっても公式ドキュメントに空のページがある… Asset Types の Vue とか。ちょっと不安です。
とはいえゼロコンフィグなバンドラという点ではメジャーな代替ツールもないようなので、期待はしています。
コメント
コメントを投稿