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; });