CoffeeScript = require './coffee-script'
child_process = require 'child_process'
helpers = require './helpers'
path = require 'path'
CoffeeScript = require './coffee-script'
child_process = require 'child_process'
helpers = require './helpers'
path = require 'path'
CoffeeScript ファイルを BOM を取り除いて読み込み、Node で実行する。
loadFile = (module, filename) ->
answer = CoffeeScript._compileFile filename, no, yes
module._compile answer, filename
インストールされた Node のバージョンが require.extensions
をサポートしている場合、CoffeeScript を拡張として登録する。
if require.extensions
for ext in CoffeeScript.FILE_EXTENSIONS
require.extensions[ext] = loadFile
マルチドット拡張を処理できるように Node のモジュールローダーをパッチする。これは必要とされるべきではない恐ろしいものである。
Module = require 'module'
findExtension = (filename) ->
extensions = path.basename(filename).split '.'
ドットファイルから先頭のドットを削除する。
extensions.shift() if extensions[0] is ''
可能な限り最も長い拡張から開始し、短縮していく。
while extensions.shift()
curExtension = '.' + extensions.join '.'
return curExtension if Module._extensions[curExtension]
'.js'
Module::load = (filename) ->
@filename = filename
@paths = Module._nodeModulePaths path.dirname filename
extension = findExtension filename
Module._extensions[extension](this, filename)
@loaded = true
Node を使用している場合は、Coffee スクリプトファイルと JavaScript ファイルの両方を直接フォークできるように、child_process.fork
をパッチする。
if child_process
{fork} = child_process
binary = require.resolve '../../bin/coffee'
child_process.fork = (path, args, options) ->
if helpers.isCoffee path
unless Array.isArray args
options = args or {}
args = []
args = [path].concat args
path = binary
fork path, args, options