什么是当它被加载到执行上下划线代码的正确方法? 我想执行下面的代码时,模块需要它自动延长_出口命名空间:
_.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
我不知道这是否是正确的做法,但我得到了它通过使下划线取决于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
混频器(如主干设置),以避免此步骤。 下划线,是一个名为模块,不同意该计划。
你需要 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.") );
});
与此争夺小时之前我明白我做错了
这是我做错了什么
你不应该重命名文件在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());