11

"JSONはコメントや関数をサポートしておらず、非常に冗長な構文(コンマ、常にキーに使用)を必要とするため、ローカル構成ファイルに使用するのは本当に面倒です。エラーが発生しやすい、または機能が必要な場合は使用できません。

今、私は私がただできることを知っています:

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

しかし、それは私が理想的とは言えないmodule.exports = {the data}内部で行う必要があります。また、信頼できない場合に構成ファイルを安全でなくする可能性config.coffeeのあるものなどを公開することもできます。require

誰かがcoffeescript構成ファイルを読む方法を見つけましたが、それらを安全に保ちますか?

4

1 に答える 1

14

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と呼ばれる優れたラッパーを作成しました。これは、 requireを介しcoffeeてファイルを作成し、上記のメカニズムを介してファイルを作成し、標準を介してファイルを作成します。また、値を文字列化してCoffeescript表記に戻します。これを使用して、次のAPIが公開されます。jscsonjsonJSON.parse

# 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
于 2012-08-19T03:36:28.990 に答える