Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 现代化的requireJS配置_Javascript_Requirejs_Modernizr - Fatal编程技术网

Javascript 现代化的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功能,使用requireJS动态检测
因为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
    }

});