如何混入下划线插件,RequireJS?(How to mixin Underscore plugi

2019-07-04 06:35发布

什么是当它被加载到执行上下划线代码的正确方法? 我想执行下面的代码时,模块需要它自动延长_出口命名空间:

_.mixin(_.str.exports());

该文档是有点模糊,但我想我把它放在垫片初始化部分? 我想下面的,但我不能连得断点在init打:

require.config({
    paths: {
        jquery: 'libs/jquery/jquery.min',
        underscore: 'libs/underscore/lodash.min',
        underscorestring: 'libs/underscore/underscore.string.min'
    },

    shim: {
        underscore: {
            exports: '_'
        }
        underscorestring: {
            deps: ['underscore'],
            init: function (_) {
                //Mixin plugin to namespace
                _.mixin(_.str.exports());

                return _;
            }
        }
    }
});

当我试图做到这一点,使用underscorestring,我得到这个错误:

未捕获的类型错误:对象函数s(E){返回新O(E)}没有方法 'startsWith'

文档:

  • http://requirejs.org/docs/api.html#config-shim
  • http://requirejs.org/docs/api.html#config-callback

Answer 1:

我不知道这是否是正确的做法,但我得到了它通过使下划线取决于underscore.string反转的事情工作。 此外,这样你就不必要求underscore.string。

require.config({
  shim: {
    'backbone': {
      deps: ['underscore', 'jquery'],
      exports: 'Backbone'
    },
    'underscore': {
      deps: ['underscore.string'],
      exports: '_',
      init: function(UnderscoreString) {
        _.mixin(UnderscoreString);
      }
    }
  },
  paths: {
    'backbone'          : 'lib/backbone',
    'jquery'            : 'lib/jquery/jquery',
    'text'              : 'lib/require/text',
    'underscore'        : 'lib/underscore',
    'underscore.string' : 'lib/underscore.string'
  }
});

更新:2014年3月14日

Underscore.js V1.6.0带回AMD的兼容性和init()从RequireJS已被删除,所以一些重构是为了。 要继续获得下划线与Underscore.string预装我做了一个混频器模块拉在一起。

新Require.js配置

requirejs.config({
  paths: {
    'backbone'            : '../lib/backbone/backbone',
    'backbone.base'       : '../lib/backbone/backbone.base',
    'backbone.extensions' : '../lib/backbone/backbone.extensions',
    'jquery'              : '../lib/jquery/jquery',
    'text'                : '../lib/require/text',
    'underscore'          : '../lib/underscore/underscore',
    'underscore.mixed'    : '../lib/underscore/underscore.mixed',
    'underscore.string'   : '../lib/underscore/underscore.string'
  },
  shim: {
    'backbone.base': {
      deps: ['underscore.mixed', 'jquery'],
      exports: 'Backbone'
    },
  }
});

underscore.mixed

define([
  'underscore',
  'underscore.string'
], function(_, _s) {
  _.mixin(_s.exports());
  return _;
});

最后一步是替换的所有实例'underscore''underscore.mixed'模块定义。 我试图移动下划线到一个文件名为underscore.base.js ,使常规underscore混频器(如主干设置),以避免此步骤。 下划线,是一个名为模块,不同意该计划。



Answer 2:

需要 underscorestring地方? 因为如果不需要它,它不会被加载。 我设法得到它与几乎一模一样您发布相同的代码工作:

require.config({
    paths: {
        underscore: [
            '//raw.github.com/documentcloud/underscore/master/underscore-min'
        ,   'lib/underscore'
        ]
    ,   underscorestring: 'https://raw.github.com/epeli/underscore.string/master/dist/underscore.string.min'
    }
,   shim: {
        underscore: { exports: '_' },
        underscorestring: {
            deps: ['underscore'],
            init: function(_) { 
                _.mixin(_.str.exports());
                return _; // guess, this is not needed.
            }
        }
    }
,   exclude: ['underscore']
});

require(['underscore', 'underscorestring'], function(_) {
    console.log( _.chars("i'm a happy string.") );
});


Answer 3:

与此争夺小时之前我明白我做错了

这是我做错了什么

你不应该重命名文件在main.js underscore.string

即使在我的图书馆我没有重命名路径的文件我把它命名回“underscore.string”

这是你应该main.js怎么样子

require.config({
paths: {
    underscore: 'lib/underscore', 
    'underscore.string' : 'lib/_string' ,
},
shim: { 
    underscore: {
        exports: '_', 
        deps: [ 'jquery', 'jqueryui' ]
    }, 
    'underscore.string': { 
        deps: [ 'underscore' ]
    },
} 
....

然后,您可以要么在你垫片添加为依赖像我一样为我的混入文件

shim: { 
    mixin : {
        deps: [ 'jquery',  'underscore', 'underscore.string' , 'bootstrap'  ] 
    },  

也可以在自己喜欢的不同页面定义

/*global define */
define([    
    'underscore.string'
], function ( ) {   

只是现在的工作,你可以通过_.str或_.string访问

这就是为什么你应该这样来做,而不是试图将其命名为别的东西

在underscore.string.js 663线

  // Register as a named module with AMD.
  if (typeof define === 'function' && define.amd)
    define('underscore.string', [], function(){ return _s; });

这意味着它只能与AMD注册它要求JS如果要定义“underscore.string”

对于混合的,你可以只用定义

 /*global define */
define([     
    'underscore',
    'underscore.string'
], function ( ) {   
  _.mixin(_.str.exports());


文章来源: How to mixin Underscore plugins in RequireJS?