是否可以阻止requireJS自动添加.js文件扩展名
Is it possible to stop requireJS from adding the .js file extension automatically?
我正在使用requireJS来加载脚本。它在文档中有以下详细信息:
用于模块名称的路径不应包含.js 扩展,因为路径映射可以是目录。
在我的应用程序中,我将所有脚本文件映射到配置路径中,因为它们是在运行时动态生成的(我的脚本以类似order.js
开始,但后来变成类似order.min.b25a571965d02d9c54871b7636ca1c5e.js
的东西(这是文件内容的哈希,用于缓存破坏目的(。
在某些情况下,require 会在这些路径的末尾添加第二个.js扩展。虽然我在服务器端生成动态路径,然后填充配置路径,但我必须编写一些额外的 javascript 代码来从有问题的文件中删除.js
扩展名。
阅读requireJS文档,我真的不明白为什么您希望将路径映射用于目录。这是否意味着可以在一次调用中以某种方式加载整个目录的文件?我不明白。
有谁知道是否可以强制要求停止向文件路径添加.js,这样我就不必破解它?
谢谢。
更新:根据要求添加了一些代码示例。
这是在我的HTML文件中(这是一个Scala项目,所以我们不能将这些变量直接写入.js
文件中(:
foo.js.modules = {
order : '@Static("javascripts/order.min.js")',
reqwest : 'http://5.foo.appspot.com/js/libs/reqwest',
bean : 'http://4.foo.appspot.com/js/libs/bean.min',
detect : 'order!http://4.foo.appspot.com/js/detect/detect.js',
images : 'order!http://4.foo.appspot.com/js/detect/images.js',
basicTemplate : '@Static("javascripts/libs/basicTemplate.min.js")',
trailExpander : '@Static("javascripts/libs/trailExpander.min.js")',
fetchDiscussion : '@Static("javascripts/libs/fetchDiscussion.min.js")'
mostPopular : '@Static("javascripts/libs/mostPopular.min.js")'
};
然后在我main.js
里面:
requirejs.config({
paths: foo.js.modules
});
require([foo.js.modules.detect, foo.js.modules.images, "bean"],
function(detect, images, bean) {
// do stuff
});
在上面的例子中,我必须使用字符串"bean"(它指的是需要路径(而不是我的直接对象(就像其他人使用 foo.js.modules.bar
一样(,否则我会附加额外的.js
。
希望这是有道理的。
如果您不想添加对 noext 的依赖关系,也可以将虚拟查询字符串附加到路径中以防止追加.js扩展,如下所示:
require.config({
paths: {
'signalr-hubs': '/signalr/hubs?noext'
}
});
这就是noext插件的作用。
requirejs' noext plugin:
加载脚本而不附加".js"扩展名,对于动态脚本很有用...
文档
检查
examples
文件夹。您可能需要的所有信息都将在注释中或示例代码本身上。基本用法
将插件放在
baseUrl
文件夹(通常与 main.js 文件相同的文件夹(中或为插件位置创建别名:require.config({ paths : { //create alias to plugins (not needed if plugins are on the baseUrl) async: 'lib/require/async', font: 'lib/require/font', goog: 'lib/require/goog', image: 'lib/require/image', json: 'lib/require/json', noext: 'lib/require/noext', mdown: 'lib/require/mdown', propertyParser : 'lib/require/propertyParser', markdownConverter : 'lib/Markdown.Converter' } }); //use plugins as if they were at baseUrl define([ 'image!awsum.jpg', 'json!data/foo.json', 'noext!js/bar.php', 'mdown!data/lorem_ipsum.md', 'async!http://maps.google.com/maps/api/js?sensor=false', 'goog!visualization,1,packages:[corechart,geochart]', 'goog!search,1', 'font!google,families:[Tangerine,Cantarell]' ], function(awsum, foo, bar, loremIpsum){ //all dependencies are loaded (including gmaps and other google apis) } );
我正在使用requirejs服务器端和node.js。noext 插件对我不起作用。我怀疑这是因为它试图将 ?noext 添加到 url 并且我们有文件名而不是 url 服务器端。
我需要将我的文件命名为 .njs 或 .model,以将它们与静态.js文件分开。希望作者将更新requirejs,以免强制用户自动.js文件扩展名约定。
同时,这里有一个快速补丁来禁用此行为。
要应用此修补程序(针对 node_modules/requirejs/bin/r.js 的 2.1.15 版(:
- 保存在名为disableAutoExt.diff或其他任何文件中,然后打开终端
- 光盘路径/到/node_modules/
- 补丁 -p1 add disableAutoExt: true, to your requirejs.config
- : requirejs.config({disableAutoExt: true,}(;
现在我们可以做require(["test/index.njs", ...] ...然后回去工作。
将此修补程序保存在禁用AutoExt.diff中:
--- mod/node_modules/requirejs/bin/r.js 2014-09-07 20:54:07.000000000 -0400
+++ node_modules/requirejs/bin/r.js 2014-12-11 09:33:21.000000000 -0500
@@ -1884,6 +1884,10 @@
//Delegates to req.load. Broken out as a separate function to
//allow overriding in the optimizer.
load: function (id, url) {
+ if (config.disableAutoExt && url.match(/'..*'.js$/)) {
+ url = url.replace(/'.js$/, '');
+ }
+
req.load(context, id, url);
},
该补丁只是在第 1887 行附近将以下内容添加到 node_modules/requirejs/bin/r.js:
if (config.disableAutoExt && url.match(/'..*'.js$/)) {
url = url.replace(/'.js$/, '');
}
更新:通过在代码中更深地移动 url 更改来改进补丁,以便在模块上调用 undef 后不再导致挂起。需要 undef,因为:
要在使用 node 进行开发时禁用模块缓存.js请将其添加到主应用程序文件中:
requirejs.onResourceLoad = function(context, map)
{
requirejs.undef(map.name);
};
- 向AngularJS目录添加JS变量
- 使用 Razor 添加 JS 代码
- 在运行时添加js文件时出现语法错误
- 如何根据窗口宽度添加js文件
- 在Cordova项目中添加.js会破坏构建过程
- 动态添加 js 到 asp.net 文件
- 添加JS时Tumblr的奇怪行为
- 如何使用 api 修改 bigcommerce 前端(在应用程序中添加 js 代码)
- 是否可以阻止requireJS自动添加.js文件扩展名
- require.js文本插件在文件名中添加“.js”
- 如何在 jquery 中添加 js var
- 在Joomla head上添加JS
- 双击和更新表字段时添加 JS/添加文本框
- 在服务器的html文件中添加.js文件作为源文件
- 在另一个文件中添加JS src
- 最早什么时候可以动态添加JS/CSS并应用它们
- 如何在eclipse中添加JS资源
- 不能添加JS文件,或任何其他,到钛项目文件夹
- ASP.. NET在页面加载时添加js文件
- 如果主体类有类添加js,如果没有添加这个js