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

bal*_*ton 11 json node.js coffeescript

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

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

require('coffee-script')
config = require('config.coffee')
Run Code Online (Sandbox Code Playgroud)

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

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

bal*_*ton 14

事实证明,CoffeeScript 通过调用设置sandbox参数来支持内置的安全性部分.例如trueeval

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

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

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

我已经为这个名为CSON的CSON创建了一个很好的包装器,它通过require 支持coffeejs文件,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
Run Code Online (Sandbox Code Playgroud)