答案有点晚,但它是(至少对于其他读者而言):css 预处理器可能是必要的。
我最喜欢的方式是node-sass-json-importer。
首先,一些配置
您需要为自己配备node-sass(但如果您实际上同时使用 node 和 sass,那么您可能已经这样做了)。您在 node-sass 文件中指定 importer 选项:
var sass = require('node-sass');
var jsonImporter = require('node-sass-json-importer');
// Example 1
sass.render({
file: scss_filename,
importer: jsonImporter,
[, options..]
}, function(err, result) { /*...*/ });
或者,如果您使用带有 sass-loader 的 webpack(我的首选方式):
import jsonImporter from 'node-sass-json-importer';
// Webpack config
export default {
module: {
// Example sass-loader usage.
// See: https://github.com/jtangelder/sass-loader#apply-via-webpack-config
loaders: [{
test: /\.scss$/,
loaders: ["style", "css", "sass"]
}],
},
sassLoader: {
// Apply the JSON importer via sass-loader's options.
importer: jsonImporter
}
};
现在实际使用
您只需在 json 文件中定义共享变量,如下所示:
//"src/shared/dimensions.js"
{
"width": "600px",
"height": "400px",
}
在 js 中使用它,嗯...它是 JSON ;) 在 SASS 中使用:
//"src/scss/game.scss"
@import '../shared/dimensions.json' //Yes, you can actually import json here
canvas {
height: $height;
width: $width;
}
很简单;)
其他选项如下:如果您选择其中之一:Stylus、Sass 或 LESS,您可以使用Rosetta。这样,您可以在一个文件中指定共享数据,例如:
//"src/shared/dimensions.rose"
$width = 600px
$height = 400px
像这样编译文件:
rosetta --jsout "src/js/dimensions.js" --cssout "src/scss/dimensions.scss" --cssFormat "scss" src/shared/dimensions.rose
您以标准方式引用生成的文件:
//"src/js/game.js"
var dimensions = require('./dimensions.js')
initGame({ width: dimensions.width.val, height: dimensions.height.val })
//"src/scss/game.scss"
@import './dimensions.scss'
canvas {
height: $height;
width: $width;
}