Javascript 带RequireJS的下划线.string
我试着同时使用和Javascript 带RequireJS的下划线.string,javascript,requirejs,underscore.js,Javascript,Requirejs,Underscore.js,我试着同时使用和 main.js的内容: require.config({ paths: { 'underscore': '//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min', 'underscore-string': '//cdnjs.cloudflare.com/ajax/libs/underscore.string/2.3.0/underscore.string.m
main.js的内容
:
require.config({
paths: {
'underscore': '//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min',
'underscore-string': '//cdnjs.cloudflare.com/ajax/libs/underscore.string/2.3.0/underscore.string.min',
},
shim: {
'underscore': {
exports: '_'
},
'underscore-string': {
deps: ['underscore'],
exports: '_s'
},
}
});
var modules = ['underscore-string'];
require(modules, function() {
// --
});
浏览器可以看到\uu
,但看不到\s
——它是未定义的
理想情况下,我希望在\uu
下有下划线,在.str
下有下划线.string,但是\u
和\u
也可以。我该怎么做
版本:要求JS 2.1.5、下划线1.4.4、下划线2.3.0
注意:感谢确保路径有两个斜杠(//cdnjs.cloudfare.com/…
),否则浏览器会认为URL是相对于服务器的,Firebug会抛出:
Error: Script error
http://requirejs.org/docs/errors.html#scripterror
我发现了错误。由于某些原因,RequireJS不能与源的下划线.string版本一起使用,因此我将其替换为。我想这和我的工作有关 当前我的代码如下所示:
require.config({
paths: {
'underscore': '//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min',
'underscore-string': '//raw.github.com/epeli/underscore.string/master/dist/underscore.string.min',
},
shim: {
'underscore': {
exports: '_'
},
'underscore-string': {
deps: ['underscore'],
},
}
});
var modules = ['underscore', 'underscore-string'];
require(modules, function(_) {
// --
});
下划线.string位于..str
中
编辑:自2013年7月16日起,CDNJS版本为。仅当我在shim中使用准确的
“下划线.string”
模块名称时,才适用于我的。似乎与下划线.string本身中的硬编码名称相关
免除下划线.string源代码(此分支在需要时执行):
因此,对我来说,唯一有效的配置是:
require.config({
paths: {
'underscore': '//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min',
'underscore.string': '//raw.github.com/epeli/underscore.string/master/dist/underscore.string.min',
},
shim: {
'underscore': {
exports: '_'
},
'underscore.string': {
deps: ['underscore'],
},
}
});
var modules = ['underscore', 'underscore.string'];
require(modules, function(_) {
// --
});
下面是一个使用Requirejs“order”插件的工作代码,它还包括Jquery,并且加载的所有内容都没有任何冲突:
requirejs.config({
baseUrl: "assets",
paths: {
order: '//requirejs.org/docs/release/1.0.5/minified/order',
jquery: 'http://code.jquery.com/jquery-2.1.0.min',
underscore: '//underscorejs.org/underscore-min',
underscorestring: '//raw.githubusercontent.com/epeli/underscore.string/master/dist/underscore.string.min',
underscoremixed: 'js/underscore.mixed' // Create separate file
},
shim: {
underscore: { exports: '_' },
underscorestring: { deps: ['underscore'] }
}
});
require(['order!jquery','order!underscoremixed'], function($,_) {
// test
console.log( _.capitalize('capitalized text') );
});
在js/underline.mixed.js内部放置以下内容
define(['underscore','underscorestring'], function() {
_.mixin(_.str.exports());
return _;
});
干杯!:) 在我明白自己做错了什么之前,我已经为此奋斗了好几个小时 这就是我做错的 不应重命名main.js中的下划线.string文件 即使在我的库中,我确实在路径中重命名了文件,但我将其重新命名为“下划线.string” 这就是您的main.js的外观
require.config({
paths: {
underscore: 'lib/underscore',
'underscore.string' : 'lib/_string' ,
},
shim: {
underscore: {
exports: '_',
deps: [ 'jquery', 'jqueryui' ]
},
'underscore.string': {
deps: [ 'underscore' ]
},
}
....
然后,您可以将其作为依赖项添加到您的垫片中,就像我对mixin文件所做的那样
shim: {
mixin : {
deps: [ 'jquery', 'underscore', 'underscore.string' , 'bootstrap' ]
},
或者在不同的页面中定义它,如
/*global define */
define([
'underscore.string'
], function ( ) {
它现在就可以工作了,您可以通过u.str或u.string访问它
这就是为什么你应该这样做,而不是试着给它取个别的名字
在下划线.string.js的第663行
// Register as a named module with AMD.
if (typeof define === 'function' && define.amd)
define('underscore.string', [], function(){ return _s; });
这意味着,如果您定义'underline.string',它将只向AMD require JS注册它。我认为问题在于requirejs假定路径是相对于您的服务器目录的下划线“:”//cdnjs.cloudflare.com/ajax/libs/underline.js/1.4.4/underline min”,“下划线字符串”:“//cdnjs.cloudflare.com/ajax/libs/underline.string/2.3.0/underline.string.min”的可能重复项
// Register as a named module with AMD.
if (typeof define === 'function' && define.amd)
define('underscore.string', [], function(){ return _s; });