如何使用 CoffeeScript 而不是 JSON?对于配置文件等
Posted
技术标签:
【中文标题】如何使用 CoffeeScript 而不是 JSON?对于配置文件等【英文标题】:How to use CoffeeScript instead of JSON? For configuration files etc 【发布时间】:2012-08-14 23:28:30 【问题描述】:JSON 确实很难用于本地配置文件,因为它不支持 cmets 或函数,并且需要非常冗长的语法(逗号,始终使用 "
作为键)。使其非常容易出错,或者在需要功能的情况下无法使用。
现在我知道我可以做到:
require('coffee-script')
config = require('config.coffee')
但是,这需要我在config.coffee
中执行module.exports = the data
,这不太理想。甚至允许暴露诸如 require
之类的东西,如果我们不信任它们,可能会使配置文件不安全。
有没有人找到一种方法来读取 coffeescript 配置文件,但要保证它们的安全?
【问题讨论】:
我将您的问题标记为垃圾邮件——“这个问题实际上是一个没有披露的广告。它没有用处或相关,而是促销。”我不反对coffeescript 或CSON,我认为你的图书馆很有趣。但我不喜欢不诚实,而这个问答舞蹈就是一场戏剧。 @LinusGThiel 我真的很困惑你的蔑视是什么。我没有因为声望而得到报酬,我没有因为开源 CSON 库而得到报酬。我发布了这个,并创建了开源库,为其他人节省时间。我没有透露这些诚实的意图。看来您对我的行为有不同的感觉,并且正在寻找支持这种感觉的方法,而不是理解我自己的看法。我觉得我在这里的行为完全符合堆栈交换对此事的看法:blog.***.com/2011/07/… 我对我之前的立场感到后悔,我理解你的看法,我赞扬你的图书馆,我深表歉意,我站得更正,我感到有点惭愧。不幸的是,我无法取消标记这个问题,所以我投了票(连同你的出色回答)。对不起,伙计。 @LinusGThiel 哇...这真是值得称赞,谢谢。如果你不介意的话,我很想多了解一下你原来立场的原因和改变的原因?就我个人而言,我相信每个人总是有好的意图,而坏的意图只是误解,所以理解误解来自哪里会很酷:)。再说一次,做你刚才所做的事情需要一个很大的勇气,谢谢:) :) 太棒了!很高兴知道。再次,非常感谢,感谢拉取请求:) 【参考方案1】:原来 CoffeeScript 支持通过 eval
调用将 sandbox
参数设置为 true
来支持内置的安全部分。例如
# Prepare
fsUtil = require('fs')
coffee = require('coffee-script')
# Read
dataStr = fsUtil.readFileSync('path').toString()
data = coffee.eval(dataStr, sandbox:true)
上面的代码会读入文件数据,然后在沙盒模式下用coffeescript eval。
我为此创建了一个很好的包装器CSON,它通过require支持coffee
和js
文件,通过上述机制支持cson
文件,以及通过典型JSON.parse
支持json
文件- 以及将值字符串化回咖啡脚本符号。使用它,会公开以下 API:
# Include CSON
CSON = require('cson')
# Parse a file path
CSON.parseFile 'data.cson', (err,obj) -> # async
result = CSON.parseFile('data.cson') # sync
# Parse a string
CSON.parse src, (err,obj) -> # async
result = CSON.parseSync(src) # sync
# Stringify an object to CSON
CSON.stringify data, (err,str) -> # async
result = CSON.stringifySync(obj) # sync
【讨论】:
太棒了!正是我想要的以上是关于如何使用 CoffeeScript 而不是 JSON?对于配置文件等的主要内容,如果未能解决你的问题,请参考以下文章
Coffeescript / Zappajs如何传递数组进行渲染
如何在 React with Coffeescript 中渲染 HTML 标签?