问题 如何使用CoffeeScript而不是JSON?对于配置文件等


JSON真的很难用于本地配置文件,因为它不支持注释或函数,并且需要令人难以置信的冗长语法(逗号,总是使用 " 为了钥匙)。使其非常容易出错,或者在需要功能的情况下,不可能使用。

现在我知道我可以这样做:

require('coffee-script')
config = require('config.coffee')

但是,这需要我这样做 module.exports = {the data} 内 config.coffee 这不太理想。甚至允许诸如此类的东西 require 暴露,如果我们不信任它们会使配置文件不安全。

有没有人找到一种方法来读取coffeescript配置文件,但保持安全吗?


12222
2017-08-19 03:36


起源

我将你的问题标记为垃圾邮件 - “这个问题实际上是一个没有披露的广告。它没有用处或相关,只是宣传。”我没有反对coffeescript或CSON,我认为你的图书馆很有趣。但我不喜欢不诚实,这个问题/答案舞蹈是一个剧院。 - Linus Gustav Larsson Thiel
@LinusGThiel我真的很困惑你的蔑视。我没有得到声誉的报酬,我没有得到开源CSON库的报酬。我发布这个,我创建了开源库,以节省其他人的时间。我没有透露这些诚实的意图。看起来你对我的行为有不同的感受,并且正在寻找支持这种行为的方法,而不是理解我自己的看法。我认为我的行为完全符合堆栈交换对此事的看法: blog.stackoverflow.com/2011/07/... - balupton
我很遗憾我以前的立场,我理解你的看法,我赞扬你为你的图书馆,我深表歉意,我的立场得到纠正,我感到有点惭愧。不幸的是我不能解开这个问题,所以我已经投票了(连同你的优秀答案)。对不起。 - Linus Gustav Larsson Thiel
@LinusGThiel哇...这真是值得称道的,谢谢。如果你不介意,我想更多地了解你的原始立场的原因和变化的原因?就我个人而言,我相信每个人总是有良好的意图,而不好的意图只是误解,所以如果要理解误解来自哪里,那就太酷了。再一次,你需要一个勇敢的人做你刚做的事,谢谢你:) - balupton
:)太棒了!很高兴知道。再次,非常感谢,并感谢拉取请求:) - balupton


答案:


事实证明,CoffeeScript通过设置支持内置的安全部分 sandbox 论证 true 通过 eval 呼叫。例如。

# Prepare
fsUtil = require('fs')
coffee = require('coffee-script')

# Read
dataStr = fsUtil.readFileSync('path').toString()
data = coffee.eval(dataStr, {sandbox:true})

上面的代码将读入文件数据,然后在沙箱模式下使用coffeescript进行评估。

我为此创建了一个很好的包装器 CSON 哪个支持 coffee 和 js 文件通过require,和 cson 通过上述机制的文件,和 json 通过典型的文件 JSON.parse  - 以及将值字符串化回coffeescript表示法。使用此方法,将公开以下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

14
2017-08-19 03:36



真棒!正是我在寻找的东西 - Manu Gambino