Requirejs Require.js可以';t加载定义自己别名的库

Requirejs Require.js可以';t加载定义自己别名的库,requirejs,Requirejs,我正在尝试将下划线.String库引入Require.js项目。该库设置为支持AMD,代码如下: } else if (typeof define === 'function' && define.amd) { // Register as a named module with AMD. define('underscore.string', [], function() { return _s; }); 但我有一个问题:我没有将库保存

我正在尝试将下划线.String库引入Require.js项目。该库设置为支持AMD,代码如下:

} else if (typeof define === 'function' && define.amd) {
    // Register as a named module with AMD.
    define('underscore.string', [], function() {
        return _s;
    });
但我有一个问题:我没有将库保存在根路径中,而是将它保存在“ext/underline.string”中。这似乎不可能要求图书馆

我已尝试要求同时使用
“ext/underline.string”
“underline.string”
,并定义路径(包括
“underline.string”:“ext/underline.string”
)。当我没有路径,并且需要“下划线.string”时,文件(毫不奇怪)不会加载,而在所有其他情况下,文件会加载,但库不会被定义

如果我以后尝试引用库,我会得到:

错误:尚未为加载模块名“下划线.string” 背景:

。。。即使我在定义行之后立即这样做(在上面的代码中)!换句话说,如果我将代码更改为

define('underscore.string', [], function() {
    return _s;
});
console.log(require('underscore.string'))
Require告诉我“下划线.字符串”尚未加载


有人能帮我弄清楚如何将此库引入我的代码库吗?

在您需要的配置中,请执行以下操作:

var require = {
    ...
    map: {
        "*": {
            "underscore.string": "path/to/file/disregarding/baseUrl"
        }
    }
};
注意:文件的路径应该包括
baseUrl
,因此在您的情况下,假设
baseUrl=“scripts”
,它将类似于:

"scripts/ext/underscore.string.js"

注2:它需要
.js
扩展名,即确切的文件名。

是名为
{path}/ext/下划线.string.js
的文件还是其他文件?是的;我的
baseUrl
assets/js
,库位于
assets/js/ext/underline.string.js
。啊,听起来很完美。。。除非它不起作用:-(当我尝试这种方法时,映射似乎起作用:下划线.string确实被加载(我可以判断是否放入了调试器),但传递给define的函数从未被调用(同样,我可以从调试器行中判断)。需要
下划线.string
的模块(加载文件后)获取
未定义的
作为模块的值,这是有意义的,因为
返回的函数从未运行过。关于如何让它运行,有什么想法吗?至少我们领先了一步。您可以尝试将映射的键从
“下划线.字符串”
更改为例如
“下划线字符串”
(并相应地修改require调用)。RequireJS可能认为
.string
是一个文件扩展名-只是为了排除这种情况。这几乎奏效了。我不仅必须更改映射(如您所建议的),但随后我还必须将
“下划线.string”:“ext/underline.string”
添加到
路径中。当我这样做时,我终于能够导入库了!谢谢。