将jadeify添加到node-express-browserify项目中

上下文

我克隆了一个基本的node-browserify样板工程,并把它解决了。 我正在使用咖啡脚本。 现在,我正试图把玉石加到这个公式上,如下所示:

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模板会更方便,所以我开始使用下划线模板来支持jade。 在做我的研究的同时,我遇到了一个相关的问题 ,提出了使用玉石的解决scheme 。 这似乎是可行的,但似乎失败了。

人们可以通过使用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 

我也看到了今天,并设法修复它。

对我来说,问题是jadeify最多取决于browserify版本1.2.9,但是当前版本的git repo中的browserify更新(如果我没有记错的话,更新,更高版本,1.8以上)。 为了使用这个设置,我自己安装了一个新的浏览器(用最新的版本),然后jadeify在它自己的模块空间中安装了它自己的依赖浏览器(与supproted版本)。

然后,当我运行我的应用程序时,我打电话给它的浏览器是新版本,但是jadeify使用的libs是旧版本,这在某处产生了冲突,因此也出现了错误。

我结束了在我的应用程序空间重新安装最新的支持版本的browserify,并修复它。

后期编辑:

上面的修复程序的问题是browserify@1.2.9没有caching,并重新加载服务器很慢。 但是我设法findbrowserify(1.9.4)的最新版本的browserijade,和jadeify完全一样。

希望能帮助到你!