blog.euxn.me

babelで環境変数を使うときはenvifyではなくbabel pluginを使う

2016-03-27 Sun.

2016/12/20 追記 環境変数を使ってビルドする場合は、Webpack の Define Plugin を使うのが良さそうです。 http://qiita.com/mikakane/items/5ab96c4c7e187ab6c9f1


開発環境と本番環境で endpoint 等を振り分けたいとき、node であれば以下のように書ける。

1const config = {
2 development: {
3 endpoint: "dev.api.example.com",
4 },
5 production: {
6 endpoint: "api.example.com",
7 },
8};
9const endpoint = config[process.env.NODE_ENV].endpoint;

しかし、babel を使用したフロントエンドでは、processの指す先が異なり、環境変数を参照できないため、動作しない。 browserify でビルドする際に環境変数で振り分けを行うにはenvifyを用いていたが、babel の場合は transform-inline-environment-variables というプラグインが存在する。

http://babeljs.io/docs/plugins/transform-inline-environment-variables/

envify でも同様のことができるのだが、browserify コマンドが複雑になってしまうため、このプラグインに代替した。

1$ npm install babel-plugin-transform-inline-environment-variables

browsefiry を実行する際には、以下のように plugin として指定する。

1$ browserify src/web.js -o public/js/app.js -t [ babelify --presets [ es2015 ] --plugins [ transform-inline-environment-variables ] ]

これにより、上記のような node と同様のコードが動作する。 実際には、トランスパイルする際にprocess.env.NODE_ENVの部分が該当する環境変数に置き換えられるため、config["development"]と書かれたことになる。 そのため、ビルドされたファイルには指定された環境以外の変数も含まれるので、その点は注意が必要。

export を分岐したり require で指定したり試したができなかったため、別環境の変数を隠蔽する場合の知見を頂ければ幸いです。

Other Works
2024-12-01 Sun.
OpenAPI Spec を出力できる DSL、TypeSpec の実践例
- ドワンゴ教育サービス開発者ブログ

2024-11-16 Sat.
型付き API リクエストを実現するいくつかの手法とその選択
- TSKaigi Kansai 2024

2024-09-10 Tue.
corepack が標準同梱じゃなくなる未来、 mise でパッケージマネージャを管理する
- Zenn

2024-09-10 Tue.
言語環境の管理は *env や *vm を超えて、 mise へ
- Zenn

2024-06-28 Fri.
TypeSpec を使い倒してる
- Kyoto.js 22

2024-05-11 Sat.
Powerfully Typed TypeScript
- TSKaigi 2024

2024-05-10 Fri.
pnpm の node_modules を探検して理解しよう
- ドワンゴ教育サービス開発者ブログ

2024-03-17 Sun.
neverthrow で局所的に Result 型を使い、 try-catch より安全に記述する
- Zenn

2023-12-20 Wed.
レガシーブラウザ向けのビルドオプションを剪定する
- ドワンゴ教育サービス開発者ブログ

2023-05-26 Fri.
Next.js で dynamic import を使い Client だけで動かす Component を実現する
- Zenn

2023-05-02 Tue.
Node.js でファイル名から拡張子を取り除く/取り出すために path.parse を使う
- Zenn

2023-02-27 Mon.
WSL2 で外部からアクセス可能にするために bridge mode を有効にする
- Zenn

2023-01-26 Thu.
init.vim & dein から init.lua & lazy.nvim へ、シンプル設定で移行した
- Zenn

2023-01-13 Fri.
kindle の本をブクログ形式の csv でエクスポートする@2023初春
- Zenn

2023-01-10 Tue.
自宅サーバの移設に際して docker から nerdctl に移行した
- Zenn

2023-01-10 Tue.
自宅サーバを rootless に移行した際のトラブル対応
- Zenn

2021-11-11 Thu.
並列実行した Promise で throw されても全てハンドルしたいときの方法(allSettled, finally, etc...)
- Zenn