🛠️
Vue CLIの環境変数でStylusのグローバル変数を入れ替えるし
Vue CLIの環境変数でStylusのグローバル変数を入れ替えるし
米:この記事の有効期限:このコードは今は動くが、いずれ動かなくなる。2021年2月20日記す
まず背景として
うう... おれ、JavaScript、わからん。
ぜんぜん、わからん。
何がしたいのか?
Stylusのグローバル変数にVue CLIの環境変数が使えたら便利やろなあ...
結論
うう... おれ、なにも書けない、なにも出来ない。
出来た事だけ書く。
- Stylusのグローバル変数が書かれたファイルを2つ用意した。ビルド用と、開発環境用にだ!
- Vue CLIの環境変数が書かれたファイルを2つ用意した。ビルド用と、開発環境用にだ!
- Vue CLIの環境変数にStylusのグローバル変数が書かれたファイルのパスを記述した
- vue.config.jsでStylusのグローバル変数が書かれたファイルをインポートした
- yarn serveしたら開発環境用が、yarn buildしたらビルド用が! やったぜ!!
コード
Stylusのグローバル変数が書かれたファイル
これらはプロジェクトフォルダ内の任意の場所に置く
src/assets/stylus-global.styl
// .env.productionで呼び出されるファイル
HaikeiShoku = #cccccc
src/assets/stylus-global-development.styl
// .env.developmentで呼び出されるファイル
HaikeiShoku = #999999
Vue CLIの環境変数が書かれたファイル
これらはプロジェクトフォルダのルートに置く
.env.production
// yarn build したときに呼び出されるファイル
VUE_APP_STYLUS_GLOBAL='src/assets/stylus-global.styl'
.env.development
// yarn serve したときに呼び出されるファイル
VUE_APP_STYLUS_GLOBAL='src/assets/stylus-global-development.styl'
vue.config.jsでStylusのグローバル変数が書かれたファイルをインポートする
これはプロジェクトフォルダのルートに置く
vue.config.js
const path = require("path");
module.exports = {
css: {
loaderOptions: {
stylus: {
stylusOptions: {
import: [path.join(__dirname, process.env.VUE_APP_STYLUS_GLOBAL)],
},
},
},
},
};
App.vueとかどこかにグローバル変数を書いて試す
yarnでserveしたりbuildしたりして余韻に浸る。
<style lang="stylus">
#app
font-family Avenir, Helvetica, Arial, sans-serif
-webkit-font-smoothing antialiased
-moz-osx-font-smoothing grayscale
text-align center
color #2c3e50
margin-top 60px
background-color HaikeiShoku
</style>
vue.config.jsの補足
Yes! Good Look
このコードは動く。人類に未来が訪れる。
const path = require("path");
module.exports = {
css: {
loaderOptions: {
stylus: {
stylusOptions: {
import: [path.join(__dirname, process.env.VUE_APP_STYLUS_GLOBAL)],
},
},
},
},
};
Oh! Not Work
これらのコードは動かない。人類は滅亡する。
FAIL
const path = require("path");
module.exports = {
css: {
loaderOptions: {
stylus: {
import: [path.join(__dirname, process.env.VUE_APP_STYLUS_GLOBAL)],
},
},
},
};
FAIL
const path = require("path");
module.exports = {
css: {
loaderOptions: {
stylusOptions: {
import: [path.join(__dirname, process.env.VUE_APP_STYLUS_GLOBAL)],
},
},
},
};
VERDAMMT!!
module.exports = {
css: {
loaderOptions: {
stylus: {
stylusOptions: {
import: [process.env.VUE_APP_STYLUS_GLOBAL],
},
},
},
},
};
参考文献
- Modes and Environment Variables | Vue CLI
- Configuration Reference | Vue CLI
- GitHub - webpack-contrib/stylus-loader: A stylus loader for webpack.
検証環境
package.json
{
"name": "try-globalval",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"core-js": "^3.8.1",
"vue": "^3.0.4"
},
"devDependencies": {
"@babel/core": "^7.12.10",
"@babel/eslint-parser": "^7.12.1",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"@vue/compiler-sfc": "^3.0.4",
"@vue/eslint-config-prettier": "^6.0.0",
"eslint": "^7.15.0",
"eslint-plugin-prettier": "^3.2.0",
"eslint-plugin-vue": "^7.2.0",
"prettier": "^2.2.1",
"stylus": "^0.54.8",
"stylus-loader": "^4.3.1"
}
}
Discussion