【问题标题】:How to load a client-script from browserify that exposes module.exports (via jadeify)如何从暴露 module.exports 的 browserify 加载客户端脚本(通过jadeify)
【发布时间】:2014-02-07 18:19:22
【问题描述】:

我有一个使用 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 吗?我见过的所有示例都在谈论捆绑包之类的东西,但我不知道它是否适用,我在目录上运行它并且在任何地方都没有提供捆绑包名称。

【问题讨论】:

    标签: javascript express requirejs pug browserify


    【解决方案1】:

    理想情况下,在任何地方都使用 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 不是很有经验,因此您的使用量可能会因这种方法而异。我真的建议对所有事情都使用 browserify。

    【讨论】:

    • 你已经证明了我对所有这些方法的确切问题,我不明白 - 在我的代码示例中,browserify 指向一个目录(这对我来说很有意义),并且单个文件成为 javascript 包装器。对于您的client.js 示例,我需要创建对该目录中每个模板的引用吗?在您的第二个示例中-如果它在目录上运行,standalone 是什么?它会命名每个文件并将其放在全局范围内吗?
    • Sorrysorry,只是添加standalone: 'template' 来命名函数——实际上并不需要它,因为它是由require.js 返回的,但它也使整个事情正常工作。谢谢,看到这个工作我很欣慰:)
    • 我仍然不确定全局范围以及它将如何与 standalone 和目录一起使用,但由于它适用于我的 require.js,我不确定我是否关心。
    • standalone 与目录一起使用的问题在于,就目前而言,它会将每个全局名称命名为相同。对于 require.js,名称不相关,因此您可以随意命名,但如果您只是将其包含在 &lt;script&gt; 标记中,您将获得一个名为 template 的变量,如果您加载该变量将被覆盖第二个模板。
    • 非常感谢您的跟进。这就是我认为它起作用的方式,只要有办法让它起作用,我就很高兴
    猜你喜欢
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 2019-03-23
    • 2018-06-19
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多