在开发中,我在我的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'
。这不是很理想,我不想在我的应用程序中更新每个需求。
答案 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