Javascript 现代化的requireJS配置
我正在尝试加载Modernizer功能,使用requireJS动态检测Javascript 现代化的requireJS配置,javascript,requirejs,modernizr,Javascript,Requirejs,Modernizr,我正在尝试加载Modernizer功能,使用requireJS动态检测 因为Modernizer内置了AMD支持,所以这不应该是个问题 我的requireJS配置包含到Modernizer源目录和feature detects目录的路径: requirejs.config({ paths: { "modernizr" : "components/modernizr/src", "feature-detects": "components/modernizr/feature-d
因为Modernizer内置了AMD支持,所以这不应该是个问题 我的requireJS配置包含到Modernizer源目录和feature detects目录的路径:
requirejs.config({
paths: {
"modernizr" : "components/modernizr/src",
"feature-detects": "components/modernizr/feature-detects"
}
});
假设我的一个视图需要svg测试。我的视图定义可能如下所示 不幸的是,
svg.js
找不到modernizer.js
,因为所有功能都检测并使源文件现代化而不指定任何目录加载modernizer:define(['modernizer'],…
)
这会导致非常丑陋的
requirejs.config({
paths: {
"Modernizr": "components/modernizr/src/Modernizr",
"addTest": "components/modernizr/src/addTest",
"ModernizrProto": "components/modernizr/src/ModernizrProto",
"setClasses": "components/modernizr/src/setClasses",
"hasOwnProp": "components/modernizr/src/hasOwnProp",
"tests": "components/modernizr/src/tests",
"is": "components/modernizr/src/is",
"docElement": "components/modernizr/src/docElement",
"feature-detects": "components/modernizr/feature-detects"
}
});
当requireJS找不到文件时,有没有更干净的方法告诉它在components/modernizer/src/
中搜索
更新
我创建了一个包含基本设置和运行的。如果我正确理解了您的问题,您是否可以这样定义您的功能:
define([
"modernizr",
"feature-detects/svg"
], function(Modernizr) {
Modernizr.addTest();
});
这样,modernizr将在您的功能检测代码运行之前加载。modernizr的AMD结构(目前)仅用于其自身的内部构建过程。我们已经讨论过公开此结构,以便可以像您尝试过的那样使用它,但尚未商定一种方便的方法。可能是一种选择 你用的是鲍尔吗?如果是的话,值得一提的是现代化 目前,将Modernizr绑定到构建过程中的推荐方法是使用,它将自动在代码中找到对Modernizr检测的引用(或者您可以显式定义它们),然后您可以在需要时像任何其他AMD依赖项一样使用生成的Modernizr构建:
define(['path/to/built/modernizr.js'], function (Modernizr) {
if (Modernizr.svg) {
...
}
});
我的建议是有一个垫片 配置 ================= 您可以在脚本中使用define
define(['Modernizr'],function(Modernizr) {
'use strict';
console.log(Modernizr)
// This should log the Modernizr function
//For Example
if(Modernizr.boxshadow){
// Do something here
}
});
想知道为什么要将AMD与Modernizr一起使用吗?你需要同步加载该文件,以便在页面其余部分呈现之前运行测试。如果我没记错的话,AMD主要是为了帮助构建过程-@SimonSmith我正在使用requireJS
r.js
脚本将我的应用程序构建到一个文件中。这将非常棒如果我可以使用requireJS定义Modernizer依赖项,我假设您使用类似Bower的东西来管理资产,因此您的组件
文件夹与项目文件夹不同(换句话说,您不能使用requireJS中的baseUrl
指向Modernizer)。不幸的是,似乎没有简单的方法添加这些依赖项,而您解决这些依赖项的方法是唯一的选择。替代方法是在Modernizer上运行r.js
,然后将打包的文件包含在您的应用程序中。仍然不太好。我想加载一个功能检测及其所有依赖项非常感谢!如果不是这样的话如果我已经有了一个定制的Modernizer版本(由Zurb基金会提供),它如何支持AMD?我没有看到任何define()对于模块。我看到在第一行的窗口上有一个全局变量。你能详细说明一下吗?@elah一个内置的Modernizer脚本与AMD不兼容,所以你应该使用一个。
paths: {
'Modernizr': 'PATH TO MODERNIZR'
},
shim: {
'Modernizr': {
exports: 'Modernizr'
}
}
define(['Modernizr'],function(Modernizr) {
'use strict';
console.log(Modernizr)
// This should log the Modernizr function
//For Example
if(Modernizr.boxshadow){
// Do something here
}
});