私はAngular 4アプリでテーマスタイリングをサポートする最良の方法を見つけようとしています。 私はSASS変数を使用しています。テーマ設定は、4つのSASS変数に依存しています。プライマリとセカンダリのカラー、バックグラウンドイメージ、スイッチはダーク/ライトテーマです。productionでangular4アプリケーションを再コンパイルするには?
今、私はアプリケーションからテーマを動的に変更したいと思います。
私はsass-vars-loaderライブラリ(https://github.com/epegzz/sass-vars-loader)を使用しています。アプリケーション構築中にJSONファイルから_vars.scssにsass変数をロードしています。コンポーネントからこれらの変数を変更すると、JSONファイルに新しい値を書き込んで、そのファイルの変更を監視しながらアプリケーションを再コンパイルします。
これは、開発中に新しい変数を_vars.scssに適切に再コンパイルして読み込んでいますが、私はそれをどのようにプロダクションでサポートできますか?
webpackを設定できるようにするため、webcam.config.jsを$ng eject
で取り除いたので、これ以上angi-cliコマンドを使用しませんでした。
// webpack.config.js
...
{
"test": /\.scss$|\.sass$/,
"use": [
"style-loader",
{
"loader": "css-loader",
"options": {
"sourceMap": false,
"importLoaders": 1
}
},
{
"loader": "postcss-loader",
"options": {
"ident": "postcss",
"plugins": postcssPlugins
}
},
{
"loader": "sass-loader",
"options": {
"sourceMap": false,
"precision": 8,
"includePaths": []
}
},
// Reads Sass vars from JSON
{ loader: "@epegzz/sass-vars-loader", options: {
files: [
path.resolve(__dirname, 'src/theme.json')
]
}
}
]
},
...
"devServer": {
setup: function(app) {
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.post("/theme", function(req, res) {
var payload = req.body,
theme;
fs.writeFileSync('src/theme.json', JSON.stringify(payload, null, 3));
res.send("Success");
});
},
}
私はWebPACKの-devのサーバーのようなjsutは、開発中にやっている、私のアプリを提供し、変更を監視するカスタムのNode.jsサーバーを作成する必要があるとします。
ご協力いただきありがとうございます。
webpackですべてを行う必要はありません。ここで見てください:https://stackoverflow.com/a/40612500/2398593 – Maxime
@Maxime私はすべてのアプリケーションでsass変数を使用していますが、テーマ変数は動的で、任意の色にすることができます。私は_vars.scssに、ユーザーが選択した値を挿入する方法が必要です。アプリが既にコンパイルされています。あなたが提供するソリューションは、sass varsを使用してルートコンポーネントのクラスをチェックし、すべての子コンポーネントでそれを行う必要があります。 – lginq
すべての子コンポーネントにはありませんが、それはポイントです – Maxime