• ジャンプする … +
    browser.coffee cake.coffee coffee-script.coffee command.coffee grammar.coffee helpers.coffee index.coffee lexer.coffee nodes.coffee optparse.coffee register.coffee repl.coffee rewriter.coffee scope.litcoffee sourcemap.litcoffee
  • register.coffee

  • ¶
    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