如何在Grunt-contrib-requirejs优化器中使用Requirejs-handlebars?

时间:2015-04-11 23:20:11

标签: javascript node.js requirejs handlebars.js require-handlebars

我目前正在使用Grunt-contrib-requirejs优化器,这样我的最终包结构看起来就像这样:

Public/
  css
  js
   -myapp.js
   -require.js

我想使用requirejs-handlebars来渲染我的模板(也在服务器端使用Express3-Handlebars)。我有NPM包requirejs-handlebars工作,但只有我在我的快速服务器中使用以下行公开模块:

app.use('/node_modules/handlebars/dist/',  express.static(path.join(__dirname, './node_modules/handlebars/dist/' )));

没有此修复程序,加载我的应用程序时出现以下控制台错误:

获取http://localhost:3300/node_modules/handlebars/dist/handlebars.runtime.amd.js require.js:166 Uncaught Error:脚本错误:handlebars.runtime

我猜这个错误是我的最终构建结构和我的需要优化器的结果。由于显而易见的原因,脚本不存在,因为我的最终构建结构不包含它。我想我不想包括使用快速中间件的handlebars.runtime,或者将它与我的最终myapp.js合并(我不知道最好的方法是什么)。有任何想法吗?对不起n00bness ...非常感谢任何建议!

谢谢!

我的main.js文件如下所示:

   require.config({
  shim: {
    jquery: {
      exports: '$'
    },
    underscore: {
      exports: '_'
    },
    backbone: {
      deps: [
        'jquery',
        'underscore'
      ],
      exports: 'Backbone'
    },
    marionette: {
      deps: [
        'jquery',
        'underscore',
        'backbone'
      ],
      exports: 'Marionette'
    },
    bootstrap: {
      deps: [
        'jquery'
      ]
    }
  },
  paths: {
    backbone: '../../bower_components/backbone/backbone',
    marionette: '../../bower_components/backbone.marionette/lib/backbone.marionette',
    jquery: '../../bower_components/jquery/jquery',
    underscore: '../../bower_components/underscore/underscore',
    requirejs: '../../bower_components/requirejs/require',
    text: '../../node_modules/requirejs-text/text',
    hb: '../../node_modules/requirejs-handlebars/hb',
    'handlebars.runtime': '../../node_modules/handlebars/dist/handlebars.runtime.amd',
  },
  packages: [
    {
      name: 'handlebars',
      location: '../../node_modules/handlebars/dist/amd',
      main: './handlebars'
    }
  ]
});


require([
  './app',
], function(App){

  'use strict';
  var myapp = new App();
  myapp.start();

});

我的Gruntfile:

     requirejs: {
          compile: {
            options: {
              baseUrl: "client/src",
              optimize: '', //uglify
              mainConfigFile:'client/src/main.js',
              name: "main",
              out: "build/app.js",
              removeCombined: true,
              logLevel: 0,
              findNestedDependencies: true,
              fileExclusionRegExp: /^\./,
              inlineText: true,
            }
          },
     },

1 个答案:

答案 0 :(得分:1)

似乎grunt requirejs没有内联handlebars.runtime模块,这就是你必须在快速代码中为它添加远程路由的原因。

我设法通过声明把手和把手的路径来修复它。运行时间我也不得不对它们进行填充。所以,我的main.js看起来像这样:

paths: {
    'handlebars.runtime': '../bower_components/handlebars/handlebars.runtime',
    handlebars: '../bower_components/handlebars/handlebars',
    hbs: '../bower_components/requirejs-handlebars/hb',
},
shim: {
    'handlebars.runtime': {
        exports: 'handlebars.runtime'
    },
    handlebars: {
        deps: ['handlebars.runtime']
    },
}

现在,当我咕噜咕噜的时候,我可以看到把手和把手。运行时内线进入我的app.js.这样可以避免从express中暴露node_modules dirs。