在 Node.js 和 Sass 之间共享配置变量

2024-01-27

我正在开发一个具有客户端-服务器架构的浏览器游戏。该游戏涉及一个 HTML 画布作为游乐场,我希望能够在单个配置文件中设置该画布的尺寸,然后在 CSS 中重用它 1) 来定义画布的实际尺寸和 2)在游戏服务器的代码中用于碰撞和其他内容。

做这个的最好方式是什么?我想我必须使用 CSS 预处理器(Sass 或 Less),但是如何将变量从 JS 或 JSON 文件导入到 Sass 中?

对不起,西班牙语不好:)


答案有点晚了,但就是这样(至少对于其他读者来说):css 预处理器可能是必要的。

我最喜欢的出行方式是节点 sass-json 导入器 https://github.com/Updater/node-sass-json-importer.

首先,一些配置

你需要装备自己节点 sass https://github.com/sass/node-sass(但如果您实际上同时使用 Node 和 sass,那么您可能已经这样做了)。您指定importer选项在你的node-sass file:

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) { /*...*/ });

或者如果你使用 webpacksass 加载器 https://github.com/jtangelder/sass-loader(我的首选方式):

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 https://www.npmjs.com/package/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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Node.js 和 Sass 之间共享配置变量 的相关文章

随机推荐

  • 单击图像时动画不重复

    单击 aTextview我正在使用以下代码片段进行帧动画 imgclickanimation setBackgroundResource R anim clickframeanimation ribinclickanimation Anim
  • 使用 TFS 2012 API,如何获取用户的电子邮件地址?

    我正在尝试使用 API 获取 TFS 2012 中特定用户的电子邮件地址 我已在 个人资料 部分中设置了用户的首选电子邮件地址 我在网上做了很多搜索并得到了以下代码 var userId myUserId var collection ne
  • 如何删除警告“从‘int’转换为‘char’可能会改变其值”

    我想如果我cast像这样的数字 unsigned char 32这足以修复编译器警告 但这并不像我计划的那样 这里我有程序的以下部分 它实际上解释了问题 include
  • 为所有 EditText 设置一致的样式(例如)

    我正在努力让一切EditText在我的应用程序中具有一致的外观 我知道我可以做这样的事情 然后我可以做一个特定的EditText通过这样做有这种风格
  • git post-receive hook 未运行捆绑安装

    我在运行接收后挂钩时遇到问题 如下所示 bin sh unset git rev parse local env vars cd commodity git pull origin master bundle install bundle
  • qt Creator 中的提升功能是什么?它是如何工作的?

    我制作了一个播放音频视频的应用程序 但我无法从 qt Creator 找到 QVideowidget 我如何将其添加到 gui 布局中 可以推广到功能帮助吗 有没有办法在 qopengl 小部件中播放视频 qvideo 小部件的任何替代方案
  • Git:如何用master更新分支?

    这是我的情况 我已经开始了一个新的分支 我们称之为foo 并为此做了一些工作 我已经推了foo远程 需要做一些事情master 所以我切换到master 进行了修复并推送 现在 我如何更新foo with master 因为我需要努力foo
  • 使用 php 和 ajax 从文件中分页

    我想在 php 中使用 ajax 进行分页 并且数据来自文件 在搜索关键字时 页面显示文件中的前 20 条记录 但现在我想要文件中的下一条剩余记录 它应该使用分页 请问有什么建议吗 keyword POST data file file g
  • 创建 ostream 到 file 或 cout 的正确方法

    我正在尝试为我在学校的项目创建一个日志类 它需要能够将信息写入标准输出或文件 具体取决于传递的参数 我正在研究如何做到这一点 我偶然发现了一个有类似问题的线程 从 std cout 或 std ofstream file 获取 std os
  • 发现多个协同签名身份(即证书和私钥对)匹配

    Code Sign error Multiple matching codesigning identities found Multiple codesigning identities i e certificate and priva
  • 更新到 [email protected] 后我无法使用 Material-ui 组件

    我在控制台中收到此消息 失败的上下文类型 所需的上下文muiTheme没有指定在AppBar AppBar js 158未捕获类型错误 无法读取属性 prepareStyles 未定义的 我的组件中只有一个 AppBar 我认为它应该有效
  • 通过querySelectorAll()获取节点列表

    给出以下示例代码 import LitElement html css from lit element class ItemsDisplay extends LitElement static get styles static get
  • 如何在json渲染中获取完整的belongs_to对象?

    基本上 我有一个属于 company 的对象 并具有 company id 属性 当我渲染 json coupons 时 JSON 是否可以包含其所有者的属性而不是 company id 你也许可以做类似的事情render json gt
  • Python argparse:如何将“--add”更改为“add”,同时仍然是可选参数?

    我想要这个功能 python program py add Peter Peter was added to the list of names 我可以通过以下方式实现这一点 add代替add像这样 import argparse pars
  • MACOSX - 如何自定义 IKImageBrowserView 以在每个项目上添加 NSButton?

    我想自定义 IKImageBrowserView 以便我可以在 IKImageBrowserView 的单元格上添加 NSButton 或其他控件 我尝试剪切 IKBrowserViewCell 类 但我不知道如何以及在哪里添加 NSbut
  • libGDX中如何处理不同的宽高比?

    我已经使用 libGDX 实现了一些屏幕 显然会使用ScreenlibGDX 框架提供的类 但是 这些屏幕的实现仅适用于预定义的屏幕尺寸 例如 如果精灵适用于 640 x 480 尺寸的屏幕 4 3 宽高比 则它不会在其他屏幕尺寸上按预期工
  • 从命令行调用 Roslyn 分析器

    在 Visual Studio 2015 中进行开发时使用 Roslyn 分析器非常棒 然而 如果能够从预提交挂钩或像 TeamCity 这样的 CI 调用分析器 以确保标记不合格的代码 那就更好了 有没有办法通过调用命令行实用程序来获取分
  • C# double 的尾数标准化

    编辑 现在开始工作 在规范化螳螂时 首先设置隐式位很重要 在解码隐式位时不必添加 我将标记的答案保留为正确的 因为那里的信息确实有帮助 我目前正在实现一种编码 可区分编码规则 并且在编码双值时遇到一些小问题 因此 我可以使用以下方法从 c
  • 使用单选按钮更改表单操作

    我想实现类似于带有单选按钮的谷歌搜索的东西 根据所选的单选按钮 将更改搜索类型 搜索 图像 视频等 现在我有 div div
  • 在 Node.js 和 Sass 之间共享配置变量

    我正在开发一个具有客户端 服务器架构的浏览器游戏 该游戏涉及一个 HTML 画布作为游乐场 我希望能够在单个配置文件中设置该画布的尺寸 然后在 CSS 中重用它 1 来定义画布的实际尺寸和 2 在游戏服务器的代码中用于碰撞和其他内容 做这个