質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

3931閲覧

webpackの環境でprocess.env.HOGEを使いたい

span

総合スコア32

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/06/15 19:12

前提・実現したいこと

webpackを用いvueでの開発を行なっております。
dotenvのようなライブラリは使わずpackage.jsonのscriptから設定した環境変数をindex.jsファイルの中でprocess.env.HOGEのように取得したいと思っておりますがうまくいきません。

該当のソースコード

//package.json ... "scripts": { "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "env": "HOGE=fuga", "env-dev": "npm run env-fire && npm run dev" }, ...
//webpack.config.js const webpack = require('webpack'); module.exports = { ... plugins: [ new webpack.EnvironmentPlugin({ HOGE: 'default' }) ], }
//index.js console.log(process.env.HOGE) //default

index.jsファイルでpackage.jsonのenv script設定したfugaが取得できることを期待していますが取得できません。
こちらは何故なのでしょうか...申し訳ありませんがご教示いただけると幸いです。
よろしくお願いいたします。

試したこと

package.jsonのscript "env"をset HOGE=fuga || export HOGE=fugaのようにもしましたがうまくいきませんでした。

webpack.config.jsのpluginsでnew webpack.DefinePluginでも試してみましたがうまくいきませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2020/06/15 21:35

index.js というのはブラウザ上で動くコードですよね? その場合、環境変数にはアクセスできません。環境変数は webpack の挙動をコントロールするために使うのだと思います。また、環境変数はプロセスごとなので、scipts で HOGE=fuga しても、その script の実行にしか影響が及ばないはずです。
span

2020/06/16 01:53

ご回答ありがとうございます index.jsはブラウザで動くコードです… ではwebpack.config.js自体などには環境変数にアクセスできるのでしょうか? もしくはそもそもがwebpack環境では独自の環境変数を持たせるのは不可能なのでしょうか…? 申し訳ありませんがご教示いただけると幸いです。
hoshi-takanori

2020/06/16 02:46 編集

webpack は開発環境で動きますので、webpack.config.js から環境変数にアクセスしてビルド時の挙動を変えることは可能です。たぶん、「webpack による js コードのビルド」が何を意味するかを掴みきれてないのでは。ちなみに、環境変数を使って何をしたいのでしょうか?
span

2020/06/16 04:29

やりたい事といたしましてはhoshi-takanoriさんが記述してくださいました「webpack.config.js から環境変数にアクセスしてビルド時の挙動を変える」をしたいと思っております! ビルド時に設定した環境変数にwebpack.config.jsでアクセスしてその中身によって読み込むenvファイルを読み分けたいというようなことがやりたいです。(dotenvは使わないと書きましたが使おうと思います) つまりまとめると【ビルド時に設定した環境変数にwebpack.config.jsでアクセスして取得する=>取得したdataを元にdotenvなどで読み込むenvファイルを出し分ける】ということがしたいです。 ご教示いただければ幸いです、よろしくお願いいたしますm(__)m
hoshi-takanori

2020/06/16 04:43 編集

お聞きしたいのは env ファイルを読み分けて、具体的に何をしたいのかということなんですが…。 (「ビルド時の挙動を変える」というのはつまり生成される bundle.js の内容が変わるということで、具体的にはデバッグ情報の有無や、ソースを難読化するかを切り替えたりすることが多いと思います。一方、表示内容の調整とか国際化とか接続先 API サーバーを切り替えるとかは、もちろんビルド時に固定することもできますが、実行時に変更できるようにしておくこともできて、どっちがしたいのでしょうか? という質問です。)
span

2020/06/16 04:52

内容読み違えており失礼いたしました... envファイルの中身はとあるサービスで使用するIDが入っているイメージです。 TEST-A環境では.env.TEST_Aファイルに書かれたID TEST-B環境では.env.TEST_Bファイルに書かれたID TEST-C環境では.env.TEST_Cファイルに書かれたID ... を使用するというようにいくつもあるテスト環境に対してそれぞれに対応したIDの出しわけをしたいと考えています。
hoshi-takanori

2020/06/16 05:35

ごめんなさい、分かってなかったのは私の方でした。 Vue にはもともと .env.xxx ファイルに書いた値を process.env 経由で使う仕掛けがあるのですね。 使い方を調べたので、回答欄に書きます。
guest

回答1

0

ベストアンサー

Vue.js には .env ファイルに書いた VUE_APP_ で始まる名前の変数を process.env 経由で使える仕組みがあるようです。
参考: vue-cli 3.0 で作成したプロジェクトの環境変数(.env)の設定 - Qiita

通常は production (npm run build) の際は .env, development (npm run serve) の際は .env.development というファイルが使われるようですが、それ以外のいろんな .env ファイルを使いたい場合は、例えば .env.test-a.env.test-b などのファイルに次のように書いて、

NODE_ENV='development' VUE_APP_TEST_ID='AAA'

package.json の scripts で mode を指定すれば良さそうです。

json

1 "scripts": { 2 "serve": "vue-cli-service serve", 3 "test-a": "vue-cli-service serve --mode test-a", 4 "test-b": "vue-cli-service serve --mode test-b", 5 ... 6 },

js

1console.log(process.env.VUE_APP_TEST_ID);

参考: Modes and Environment Variables | Vue CLI

(でも、もしかしたら、vue-cli を使ってないと駄目かも…。)

投稿2020/06/16 05:54

編集2020/06/16 06:06
hoshi-takanori

総合スコア7901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問