2

在开发中,我在我的 Express 服务器上同时使用 Coffeescript 和 Browserify 中间件来交付我的客户端 JS,如下所示:

app.use browserify mount: '/client.js', entry: './client.coffee', watch: yes

今天我正在升级我的依赖项,并在 browserify v2 网站上注意到了这一点:

browserify 中最糟糕的想法之一,用于托管捆绑包的临时 http 服务器中间件终于消失了。

对咖啡脚本的默认支持已不复存在。您仍然可以在您的程序中使用咖啡脚本,您只需要编译为 js 或自己将源转换挂钩到捆绑管道中。

请记住,如果您不同意我希望很多人会同意的这些削减,那么通过 v2 重构,您可以更轻松地了解 browserify 应该如何使用底层新库作为起点。

很公平。

唯一的问题是,我已经阅读了新 API 的文档,但我对如何实际实现自己的中间件有点茫然。事实上,我什至无法使用browserify.add()and获得一个基本的独立示例browserify.bundle(),更不用说作为快速中间件了。

我可以继续使用 v1,但由于这个项目仍在开发中,我想保持我的依赖项是最新的。任何建议都非常感谢。

更新:

我已经做到了这一点:

browserify = require 'browserify'
coffee = require 'coffee-script'
through = require 'through'

app.get '/client.js', (req, res) ->
  b = browserify()
  b.add './client.coffee'
  b.transform (file) ->
    write = (buf) ->
      data += buf
    end = ->
      @queue coffee.compile(data)
      @queue null
    data = ''
    return through(write, end)
  b.bundle {}, (err, src) ->
    res.send src

这行得通,除了我曾经说过的require './module'地方,我现在必须这样做require './module.coffee'。这不是很理想,我不想更新我的应用程序中的每个需求。

4

5 回答 5

5

我得到了这个工作:

browserify = require('browserify-middleware')
coffeeify = require('coffeeify')
express = require('express')

app = express()

browserify.settings('transform', [coffeeify])

app.get('/client.coffee', browserify('./client.coffee'));

app.listen(3230);

但它可能无法解决需要的require("X.coffee")问题。

于 2013-06-13T04:23:48.587 回答
2

如果你喜欢 grunt 进行开发,我已经开发了这个任务: https ://github.com/amiorin/grunt-watchify

它缓存依赖项并监视文件系统。因此,构建速度非常快。您可以将它与 grunt-contrib-watch 和 grunt-contrib-connect 一起使用,也可以单独使用。您可以在 github 存储库中找到 Gruntfile.js 示例。

如果不使用 grunt,可以使用来自 @substack 的原始 watchify:https ://github.com/substack/watchify

你当然可以用咖啡和transform.

于 2013-06-17T20:09:03.363 回答
1

为 browserify 提供咖啡脚本编译中间件的方法是通过带有 -t 标志的转换模块或带有 -c 标志的转换命令。它们有其局限性,但它们可以完成简单的咖啡脚本编译。使用任一标志,每个所需文件都会通过一个进程运行(例如,从 coffeescript 编译为 javascript),然后再对其进行分析并连接到输出包中

事实上,browserify 自述文件现在有关于如何完全为咖啡脚本做到这一点的文档:

https://github.com/substack/node-browserify#btransformtr

在您的情况下,最简单的方法就是使用以下命令:

browserify -c 'coffee -sc' main.coffee > bundle.js

假设您的入口点咖啡脚本文件名为 main.coffee。

Substack 还创建了一个 coffeeify npm 模块来包装它,但它是当前版本后面的咖啡脚本版本(例如,没有源映射)。

于 2013-03-09T12:55:35.800 回答
1

此时您有两个转换器选项,它们都支持源映射。

它们是相同的,只是后者只重新编译coffee实际更改的文件,从而加快开发过程。

在这两种情况下,您都需要打开源映射,--debug如果您使用命令行则传递一个标志,或者如果您使用的是构建脚本则提供{debug: true }bundle函数。

还要确保在浏览器中启用源映射。

在博客上写了这一切,所以如果你需要更多细节,你应该在这里找到你需要的所有信息。

于 2013-04-13T15:53:26.950 回答
1

我写了一个肮脏的 broweserify 中间件咖啡编译器(js 和下划线模板也是)。它不是非常好,但它确实有效。

https://github.com/pr1ntr/bundlr

用法很简单

var bundlr = require('bundlr');
app.use(bundlr({options}))

选项:

src = bootstrap js 或咖啡的位置

dest = (如果你想让它写一个你想要的文件)

route = 让它编译的路径或路径

如果您希望它不压缩并添加源映射,则 debug = true/false

cache = 如果您希望服务器缓存响应(用于生产环境)

如果你想让它把文件写到目的地,write = 传递 true

于 2013-06-21T21:36:04.953 回答