将 CoffeeScript 文件编译成一个 js 文件

Posted

技术标签:

【中文标题】将 CoffeeScript 文件编译成一个 js 文件【英文标题】:Compile CoffeeScript files into one js file 【发布时间】:2012-07-19 17:38:00 【问题描述】:

我想知道是否可以使用 2.0.2(或中继)将我所有的 assets/*.coffee 文件编译成一个定义的(比如 app.js 和 app.min.js)文件,因此 没有使用本机编译器?

【问题讨论】:

原生编译器是什么意思,你想用什么代替? Play框架提供了一个集成的CoffeeScript编译器,我很想用这个,不知道用这个能不能把所有的*.coffee编译成一个。我找到的建议解决方案是使用本机编译器,我想避免使用。 我也不明白你所说的“本机编译器”是什么意思,但是咖啡有-c 编译参数和-j 将结果合并到一个文件中。我这样做的方式是:coffee -cj ./js/game.js ./coffee playframework.org/documentation/2.0.2/AssetsCoffeeScript 在选项下。我不能更明确地了解本机编译器! 我不认为它是一个原生编译器(就像一个用 Scala 重写的 coffeescript 编译器),它只是调用了 coffeescript 编译器。 【参考方案1】:

由于 scala coffeescript 进程目前似乎支持的唯一选项是“bare”(http://www.playframework.com/documentation/2.0.2/AssetsCoffeeScript#options),因此您可能必须有一个进程来包装您的咖啡脚本,然后将它们放入适当的文件中。您可以将 grunt 用于该任务。以及处理文件的插件 grunt-contrib-coffee

coffee:
  compile:
    files:
      'app/assets/app.js': [
        'file1.coffee'
        'file2.coffee'
      ]

将按顺序编译这些 src 文件并将编译后的文件放在 app/assets/app.js 中,该文件应该被 play 拾取。

grunt-contrib-coffee:https://github.com/gruntjs/grunt-contrib-coffee

【讨论】:

【参考方案2】:

你不能只写一个构建脚本或使用cakefile吗?类似这样的东西:

fs = require 'fs'
exec require 'child_process'

fs.readdir 'path/to/coffee/', (err, files) ->
    concat_result = ''
    concat_file = 'path/to/concat_file.coffee'
    for file in files
        concat_result += fs.readFileSync file, 'utf8'

    concat_file = fs.writeFile concat_file, concat_result
    exec "whatever_compiler -c -o path/to/outfile #concat_file", (err, stdout, stderr) ->
        #handle errs

【讨论】:

以上是关于将 CoffeeScript 文件编译成一个 js 文件的主要内容,如果未能解决你的问题,请参考以下文章

ruby on rails 中的 Coffeescript 编译错误

coffeescript、jade、stylus -> js、css 资产管理器?节点.js

NodeJS + CoffeeScript,根据要求渲染 CoffeeScript 编译的 js

104 CoffeeScript 简史

Ant 使用 exec 目标编译 Coffee Scripts

JetBrains IDE:禁用 CoffeeScript -> 保存时生成 .js 文件