JSON 确实很难用于本地配置文件,因为它不支持注释或函数,并且需要非常冗长的语法(逗号,始终使用 "
作为键)。使其非常容易出错,或者在需要功能的情况下,无法使用。
现在我知道我可以做到:
require('coffee-script')
config = require('config.coffee')
但是,这需要我在 config.coffee
中执行 module.exports = {the data}
,这并不理想。甚至允许暴露诸如 require
之类的东西,如果我们不信任它们,可能会使配置文件不安全。
有没有人找到一种方法来读取 coffeescript 配置文件,但要保证它们的安全?
最佳答案
原来 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
文件典型的 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
关于json - 如何使用 CoffeeScript 而不是 JSON?对于配置文件等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12024020/