我应该如何构建我的模块才能使用hbsfy和browserify?

时间:2014-06-10 23:35:51

标签: handlebars.js browserify

我想使用browserifyhbsfy Handlebars转换来模拟我正在编写的Web应用程序中的JavaScript。

使用gulp,我设置了运行browserify和hbsfy的任务,使用对我的模块进行分组的源结构将几个js和hbs文件编译成一个:

/src
  - /javascript
    - app.js
    - /module-one
      - module-one.js
      - module-one.hbs
    - /moduleTwo
      - module-two.js
      - module-two.hbs

然而,当从另一个模块引用一个模块时,这是有问题的 - 需要使用脆弱的相对路径,如果模块被移动或进一步嵌套则需要更新。

substack在他的(伟大的)浏览器手册中写了Avoiding ../../../../../../..。在那里,他建议将应用模块存储在node_modules下的目录中。

很高兴我开始着手这样做,但很快遇到了hbsfy不再编译模板的问题。根据{{​​3}},browserify将只转换顶级文件,并且只有在global选项设置为true时才会转换node_modules中的文件。

这解决了我的问题,但文档指出:

  

从大多数时间开始,谨慎而谨慎地使用全局变换   普通的变换就足够了。

我不相信我的用例很不寻常 - 我应该以不同的方式存储我的模块吗?或者我错过了一块拼图?

1 个答案:

答案 0 :(得分:0)

我在hbsfy中找到了一个简单的例子,它可能对你有用https://github.com/epeli/node-hbsfy/blob/master/example/index.js

这取决于你正在看的框架是什么,如果你正在做angularjs,你可以在https://github.com/mallim/sbangular/blob/master/src/main/resources/js/login/LoginCtrl.js

中看到一个例子

在这种情况下,具体代码如下:

  app.run(['$templateCache', function($templateCache) {
    $templateCache.put('login.html', require('./login.html') );
  }]);

login.html实际上与LoginCtrl.js在同一个文件夹中