设置lodash /强调模板设置全局使用require.js(Set lodash / unders

2019-07-02 13:36发布

有没有一种方法来设置templateSettings为lodash使用时RequireJS ?

现在在我的主启动我有,

  require(['lodash', 'question/view'], function(_, QuestionView) {
    var questionView;
    _.templateSettings = {
      interpolate: /\{\{(.+?)\}\}/g,
      evaluate: /\{\%(.+?)\%\}/g
    };
    questionView = new QuestionView();
    return questionView.render();
  });

但它似乎并不想设定的templateSettings因为当我使用全球_.template(...)的模块中它要使用默认templateSettings 。 问题是,我不希望使用的每个模块中更改此设置_.template(...)

Answer 1:

基于@Tyson Phalp建议,这意味着这太问题 。
我把它适用于你的问题,我用RequireJS 2.1.2和测试它匀场片配置 。
这就是main.js文件,即在requireJS配置为:

require.config({
/*  The shim config allows us to configure dependencies for
    scripts that do not call define() to register a module */

    shim: {
      underscoreBase: {
        exports: '_'
      },
      underscore: {
        deps: ['underscoreBase'],
        exports: '_'
      }

    },
    paths: {
      underscoreBase: '../lib/underscore-min',
      underscore: '../lib/underscoreTplSettings',
    }
});

require(['app'],function(app){
  app.start();
});

那么你应该创建underscoreTplSettings.js与templateSettings文件,如下所示:

define(['underscoreBase'], function(_) {
    _.templateSettings = {
        evaluate:    /\{\{(.+?)\}\}/g,
        interpolate: /\{\{=(.+?)\}\}/g,
        escape: /\{\{-(.+?)\}\}/g
    };
    return _;
});

所以,你的模块underscore将包含下划线库和模板设置。
从您的应用程序模块只需要underscore模块,以这种方式:

define(['underscore','otherModule1', 'otherModule2'], 
   function( _, module1, module2,) { 
      //Your code in here
   }
);

我唯一的疑问是,我出口的相同符号_两次,甚至强硬这项工作我不知道如果这被认为是一个很好的做法。

=========================

另一种解决方案:这也工作正常,我想这是多一点点干净,避免创建并需要额外的模块,如上面的解决方案。 我已经改变了使用的初始化函数的垫片配置的“出口”。 如需进一步了解看沉配置参考 。

//shim config in main.js file
shim: {     
  underscore: {
      exports: '_',
      init: function () {
        this._.templateSettings = {
          evaluate:/\{\{(.+?)\}\}/g,
          interpolate:/\{\{=(.+?)\}\}/g,
          escape:/\{\{-(.+?)\}\}/g
        };
        return _; //this is what will be actually exported! 
      }
  }
}


Answer 2:

你应该用模板设置为函数参数或在全局对象( 窗口浏览器或proccess为的NodeJS)财产传给你_变量。

_.templateSettings = {
      interpolate: /\{\{(.+?)\}\}/g,
      evaluate: /\{\%(.+?)\%\}/g
};
questionView = new QuestionView(_);

要么

_.templateSettings = {
      interpolate: /\{\{(.+?)\}\}/g,
      evaluate: /\{\%(.+?)\%\}/g
};
window._ = _  

第一个选项是更好的。



Answer 3:

记住,如果你使用下划线> = 1.6.0或lodash,AMD的解决方案是非常简单的:

“main.js”配置文件

require.config({
  baseUrl: './', // Your base URL
  paths: {
    // Path to a module you create that will require the underscore module.
    // You cannot use the "underscore" name since underscore.js registers "underscore" as its module name.
    // That's why I use "_".
    _: 'underscore',

   // Path to underscore module 
   underscore: '../../bower_components/underscore/underscore',
  }
});

您的“_.js”文件:

define(['underscore'], function(_) {

  // Here you can manipulate/customize underscore.js to your taste.
  // For example: I usually add the "variable" setting for templates
  // here so that it's applied to all templates automatically.

  // Add "variable" property so templates are able to render faster!
  // @see http://underscorejs.org/#template
  _.templateSettings.variable = 'data';

  return _;
});

模块文件。 它要求我们“_”模块要求“下划线”和补丁吧。

define(['_'], function(_){
  // You can see the "variable" property is there
  console.log(_.templateSettings);   
});


文章来源: Set lodash / underscore template settings globally using require.js