如何从browserify加载客户端脚本,公开module.exports(通过jadeify)

时间:2014-02-07 18:19:23

标签: javascript express requirejs pug browserify

我有一个使用browserify + browserify-middleware + jadeify

的玉石模板创建的javascript文件

这一切都在节点的服务器端,这是创建生成的javascript文件所需的唯一内容:

app.use('/templates', require('browserify-middleware')('./public-includes'),
{
    grep: /\.jade$/,
    transform: ['jadeify']
}));

然后在网络浏览器中,我从/templates/template.jade获得了一些javascript代码,(编辑:我发布了它here)我可以看到它设置了各种各样的功能module.exports(就像节点一样)。但是我如何从客户端使用它?我尝试使用require.js这样var template = require('/templates/template.jade', function(template){});,返回未定义。

我是否应该在客户端使用browserify?我见过的所有例子都谈论了bundle和stuff,但我不知道它是否适用,我在一个目录上运行它并且不在任何地方提供一个包名。

1 个答案:

答案 0 :(得分:2)

理想情况下,到处使用browserify。要做到这一点,只需要一个client.js文件:

var template = require('./templates/template.jade');
// rest of code here

然后在服务器上执行:

app.get('/client.js', require('browserify-middleware')('./client.js',
{
    transform: ['jadeify']
}));

在您的HTML中,您只需执行以下操作:

<script src="/client.js"></script>

另一种选择,如果您想使用requirejs或仅使用独立的全局,您可以这样做:

app.get('/templates', require('browserify-middleware')('./public-includes'),
{
    grep: /\.jade$/,
    transform: ['jadeify'],
    standalone: 'template'
}));

然后,您应该在客户端上找到全局template变量,或者它应该与requirejs一起使用,这样您就可以执行以下操作:

require('/templates/template.jade', function (template) {
  //use template here
});

虽然我对requirejs不是很有经验,所以你的milage可能因这种方法而异。我真的建议使用browserify来处理所有事情。