将Jadeify添加到一个Node-Express-Browserify项目中。

4

背景

我克隆了一个基本的node-browserify模板项目并将其启动。我正在使用coffee-script。现在,我正在尝试将jadeify添加到方程式中,如下所示:

bundle = browserify
    entry: __dirname + "/app/init.coffee"
    debug: true
    mount: "/app.js"
bundle.use jadeify __dirname + '/views'
app.use bundle

在我尝试在任何地方使用jadeify之前,就会出现这个问题。

问题

一切都正常工作,直到我将bundle.use(jadeify(__dirname + '/views'))作为中间件添加到browserify中。然后我在浏览器控制台中收到以下错误消息:

Uncaught ReferenceError: __require is not defined

根据浏览器控制台,此消息的来源是/app.js。
问题
为什么一旦我尝试为browserify添加jadeify中间件,这个脚本就会出错?
动机
我认为重用服务器端的jade模板于客户端会更加方便,所以我放弃了underscore模板而选择了jade。在研究过程中,我看到一个相关问题的解决方案,建议使用jadeify。它似乎可行,但某些地方似乎出了问题。
2个回答

4
使用browjadify可以绕过jadeify。
Usage:
   browjadify --entry=app.coffee >bundle.js

来源:browjadify

#!/usr/bin/env node

var jade = require('jade')
var browserify = require('browserify')
var fs      = require('fs');
var argv = require("optimist").argv;

var b = browserify()

b.register('.jade', function(body) {
    var options = {"client": true, "compileDebug": false};
    body = "module.exports = " + jade.compile(body, options).toString() +";";
    return body;
});

var jaderuntime = require('fs').readFileSync(__dirname+"/node_modules/jade/runtime.js", 'utf8');
b.prepend(jaderuntime); // Brings in var jade that jade.compile needs

b.addEntry(argv.entry); // gets browserify to do its thing

console.log(b.bundle()); // the bundled output

当我尝试这种方法时,我错过了{"client": true}。这个.jade处理程序对于browserify来说是一个不错的替代品。 - dragon

2

我今天也遇到了这个问题,并且成功地解决了它。

对我来说,问题在于jadeify依赖于browserify的版本最高为1.2.9,但是git仓库中当前的browserify版本更新(远超过1.8,如果我没记错的话)。而且作为一个新手,我先安装了最新版本的browserify,然后jadeify在自己的模块空间中安装了它自己所依赖的browserify(支持的版本)。

然后当我运行我的应用程序时,我调用的browserify是新版本,但是jadeify使用的库是旧版本,这在某个地方创建了冲突,因此你看到了同样的错误。

最后我只重新安装了我应用程序空间中最新支持的browserify版本,问题就解决了。

后来编辑:

上面的解决方法存在问题,即browserify@1.2.9没有缓存,导致重新加载服务器非常慢。但是我找到了browserijade,它可以与最新版本的browserify(1.9.4)一起工作,并且与jadeify完全相同。

希望这可以帮到你!


感谢您指出不同版本的问题;这解释了为什么原始设置无法工作。'browserijade' 看起来是一个不错的替代品,但未来的 browserify 版本可能会遇到类似的问题,因此更倾向于采用精益方法。 - dragon
我同意,但看起来他们将会保持它的最新状态,任何依赖解析也是如此。但回到主要问题,我想知道使用browjadify是否提供了相同的功能,尤其是部分动态引用。 - Bogdan Dumitru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接