如何使用 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支持coffeejs文件,通过上述机制支持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 标签?

在 CoffeeScript 中,如何将值附加到数组?

Coffeescript奇怪的行为[重复]

Rails 3.1:我需要使用 CoffeeScript 吗?

在 JavaScript/CoffeeScript 中确定一个数组是不是包含另一个数组的内容