browserify v2中间件

时间:2013-03-01 02:04:15

标签: node.js express coffeescript middleware browserify

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

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

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

  

browserify中最糟糕的一个想法,即ad-hoc http服务器   托管捆绑包的中间件终于消失了。

     

咖啡脚本的默认支持已经消失。你仍然可以使用咖啡   你的程序中的脚本,你只需要编译成js或   自己将源转换挂钩到bundle管道中。

     

请记住,如果你不同意这些我期望很多的削减   人们会在v2重构的同时更容易推出自己的   浏览器应该如何使用底层新库的愿景   作为一个起点。

足够公平。

唯一的问题是,我已经阅读了新API的文档,而且我实际上如何实现自己的中间件有点不知所措。事实上,我甚至无法使用browserify.add()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'。这不是很理想,我不想在我的应用程序中更新每个需求。

5 个答案:

答案 0 :(得分: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")问题的需要。

答案 1 :(得分:2)

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

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

如果您不使用grunt,可以使用@substack中的原始密码:https://github.com/substack/watchify

您当然可以使用transform

来使用咖啡

答案 2 :(得分:1)

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

事实上,现在有关于如何完全针对coffeescript的浏览器自述文件的文档:

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

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

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

假设您的入口点coffeescript文件名为main.coffee。

Substack还创建了一个coffeeify npm模块,它包含了这个,但它是当前背后的咖啡脚本版本(例如,没有源地图)。

答案 3 :(得分:1)

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

它们完全相同,只是后者只重新编译实际发生变化的coffee个文件,这些文件加快了开发过程。

在这两种情况下,您需要打开源地图,如果您是using the command line则传递--debug标记,或者{debug: true }提供bundle以防万一正在使用build script

还要确保在浏览器中启用源地图。

blogged about all this所以,如果您需要更多详细信息,请在此处找到所需的所有信息。

答案 4 :(得分:1)

我写了一个脏的broweserify中间件咖啡编译器的东西(也是js和下划线模板)。它的效果并不是很好但是很有效。

https://github.com/pr1ntr/bundlr

用法很简单

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

选项:

src = bootstrap js或coffee的位置

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

route =获取它进行编译的路径或路径

debug = true / false如果你不想压缩和添加源地图

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

write =如果要将文件写入目标

,则传递true