我正在为使用RequireJS的应用程序编写一些测试.由于应用程序的工作方式,它希望通过调用获得一些类require.因此,对于测试,我有一些虚拟类,但我不想将它们放入单个文件中,仅用于此测试.我更喜欢define()在我的测试文件中手动设置它们,如下所示:
define('test/foo', function () {
return "foo";
});
define('test/bar', function () {
return "bar";
});
test("...", function () {
MyApp.load("test/foo"); // <-- internally, it calls require('test/foo')
});
Run Code Online (Sandbox Code Playgroud)
这里的问题是这些模块的评估被推迟,直到脚本onload事件被触发.
Run Code Online (Sandbox Code Playgroud)//Always save off evaluating the def call until the script onload handler. //This allows multiple modules to be in a file without prematurely //tracing dependencies, and allows for anonymous module support, //where the module name is not known until the script onload event //occurs. If …
AMD似乎是根据需要加载JavaScript模块的最佳实践.
这应该适用于大型Web应用程序,其中用户只使用一小部分可用功能.
我已经阅读了优化器,它将所有必需的模块连接成一个文件,我读过没有优化,即用异步请求加载每个模块.
两者似乎都不适合这种用例:使用请求加载每个模块可能会很快导致大量请求,而优化会强制您下载所有代码.
有没有办法将多个模块捆绑到一个文件中?
我正在使用requirejs + jquery + jqueryui.我已经阅读了很多关于如何做到这一点的例子.我想我了解各种方法,在我看来,我的设置应该正常工作.但是,我偶尔会在依赖于jquery-ui的自定义模块中获得$ .widget未定义的错误.这是一种痛苦,因为它不一致且难以复制,因此我很难测试其他方法.
我没有填充所有的jquery插件,因为有很多.相反,我正在使用单独的requirejs调用加载jquery.然后,在回调中,我加载其余的东西.这样我就不必维护所有jquery插件的填充程序列表.
对于jquery-ui,我使用垫片使其依赖于jquery.然后我使用小部件工厂的所有自定义模块在其依赖项列表中都有"jquery-ui".
在我的模板中......
requirejs.config({
baseUrl: ATHLETE.siteConfig.jsBaseUrl,
paths: {
'jquery': '//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min',
'jquery-ui': '//ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min'
},
shim: {
"jquery-ui": ['jquery']
},
waitSeconds: 15
});
requirejs(['jquery'], function($) {
requirejs(['site'], function() {
requirejs(['mypage']);
});
});
Run Code Online (Sandbox Code Playgroud)
请注意,我在mypage.js之前加载site.js. 他们有一些共享的依赖项.在我的构建配置中,我从mypage.js中排除了site.js,因此共享依赖项被编译到site.js而不是mypage.js.因此,我需要在加载mypage.js之前完全加载site.js,否则require可能会尝试单独加载这些共享依赖项.
这是我的一个示例自定义模块,它依赖于jquery-ui.
define([
'jquery',
'jquery-ui'
],function($) {
$.widget('ui.viewAllSponsorsWidget', $.ui.dialog, {
options: {
autoOpen: false,
dialogClass: 'view-all-sponsor-dialog-wrap',
draggable: false,
modal: true,
resizable: false,
width: 370,
height: 400
}
});
});
Run Code Online (Sandbox Code Playgroud)
错误$ .widget未定义是由此的第5行和我的类似自定义模块引起的.再次,它真的不一致,很难再现.通常情况下,即使清除缓存,我也不会收到错误.任何人都可以想到在jquery-ui完全加载之前第5行可能会被执行的方式吗?
更新2013年8月16日
我已经能够跟踪这一点了.我创建了一个依赖于jquery和jquery-ui的简单模块.
define([
'jquery',
'jquery-ui'
],function($) {
console.log('$.widget is …Run Code Online (Sandbox Code Playgroud) 什么时候应使用paths与packages在RequireJS?是否有最好的做法,或者在我应该考虑使用其中一个的特定时间?
我跟着文档,我想出了这个:
// main.js
requirejs.config({
enforceDefine: true,
urlArgs: "bust=" + (new Date()).getTime(),
baseUrl: "./js",
waitSeconds: 7,
paths: {
"jquery": [
'jquery'
],
"underscore": [
'underscore'
],
"backbone": [
'backbone'
],
"handlebars": [
'handlebars'
]
},
shim: {
"underscore": {
deps: [],
exports: "_"
},
"backbone": {
deps: ["jquery", "underscore"],
exports: "Backbone"
},
"handlebars": {
deps: [],
exports: "Handlebars"
}
} // End shim
}); // End config
// List all files; use 'define()' and not 'require()' …Run Code Online (Sandbox Code Playgroud) 我想从requirejs迁移到SystemJS但是我没有找到解决方案,因为requirejs有模块版本控制.例如在生产(ASP.Net网站)中我设置了RequireJS,如下所示:
require.config({
baseUrl: "@Url.Content("~/Scripts/")",
urlArgs: "buildNumber=@(File.GetLastWriteTime(ViewContext.Controller.GetType().Assembly.Location).ToBinary().ToString() + typeof(Foundation.MvcApplication).Assembly.GetName().Version)",
...
});
Run Code Online (Sandbox Code Playgroud)
它保证在生产环境中重新发布项目后重新加载文件,并保持这种方式直到重新加载.
但是,我没有为SystemJS找到任何解决方案(因为SystemJS管理更多类型的模块,我想迁移到它).
有没有人在生产中使用SystemJS并遇到同样的问题,你知道SystemJS中的"urlArgs"参数(或插件)吗?
我对SystemJS有点困惑,它似乎自动单独加载文件,不编译并将这些最小化为一个大的js文件.
我认为最初的想法是要求不同的文件,虽然较小的是不好的做法?和一个首选的大型js文件(最小化)并生成.
这就是我现在安装SystemJS来加载单独文件的方法(见下文),现在这是推荐的方法吗?
System.config({
packages: {
app: {
format: 'register',
defaultExtension: 'js'
}
}
});
System.import('app/main')
.then(null, console.error.bind(console));
Run Code Online (Sandbox Code Playgroud) 我遵循了以下说明:
https://gist.github.com/jarutis/ff28bca8cfb9ce0c8b1a
但是当我尝试时:
测试文件中的THEANO_FLAGS = device = opencl0:0 python test.py 我收到错误:
错误(theano.sandbox.gpuarray):pygpu已配置但无法导入Traceback(最近一次调用最后一次):文件"/home/mesayantan/.local/lib/python2.7/site-packages/theano/sandbox/gpuarray/init .py",第20行,in
import pygpu
Run Code Online (Sandbox Code Playgroud)
文件"/ usr/src/gtest/clBLAS/build/libgpuarray/pygpu/init .py",第7行,in
from . import gpuarray, elemwise, reduction
Run Code Online (Sandbox Code Playgroud)
文件"/usr/src/gtest/clBLAS/build/libgpuarray/pygpu/elemwise.py",第3行,in
from .dtypes import dtype_to_ctype, get_common_dtype
Run Code Online (Sandbox Code Playgroud)
文件"/usr/src/gtest/clBLAS/build/libgpuarray/pygpu/dtypes.py",第6行,in
from . import gpuarray
Run Code Online (Sandbox Code Playgroud)
ImportError:无法导入名称gpuarray
我没有好主意.我是第一次使用这些.我正在研究Ubuntu 14.04 LTS.我该如何解决这个错误?
我正在为现有项目开发一个新模块,该模块仍然使用requireJS进行模块加载.我正在尝试为我的新模块使用新技术,例如webpack(允许我使用es6导入器使用es6加载器).似乎webpack无法与requireJS语法协调.它会说:"找不到模块:错误:无法解决".
问题:Webpack不会捆绑带有requireJS/AMD语法的文件.
问题:有没有什么方法可以让webpack在requireJS上玩得很好?
我的最终输出必须是AMD格式才能让项目正确加载它.谢谢.
我想下载适用于 Windows 和 Linux 的 OpenCL AMD APP SDK 3.0 的独立版本。
我正在使用 loader.js 创建摩纳哥编辑器,但在控制台中出现两次错误“每个脚本文件只能有一个匿名定义调用”。
<script src="/monaco-editor/min/vs/loader.js"></script>
Run Code Online (Sandbox Code Playgroud)
创建编辑器的代码
require.config({ paths: { 'vs': '/monaco-editor/min/vs' }});
require(['vs/editor/editor.main'], function() {
monacoEditor= monaco.editor.create(document.getElementById('coding-editor'), {
value: [
'function x() {',
'\tconsole.log("Hello world!");',
'}'
].join('\n'),
language: 'javascript'
});
});
Run Code Online (Sandbox Code Playgroud)
我尝试搜索该问题并找到以下相关答案:
您正在加载的某些代码正在使用匿名模块 ID 调用定义。你可以:
通过 AMD 加载器加载该代码(即手动需要它),以便 AMD 加载器创建标签<script>。
在 AMD 加载程序之前加载该代码(即定义对该代码段不可用)
在该脚本的评估期间取消设置定义(即,如果您使用标签加载它<script>,则在之前取消设置定义并在之后恢复它)
尝试取消设置define.jquery,据我所知jquery可能会在定义函数上检查它
这个页面已经有很多 jquery 了,我之所以理解这一点是因为 jQuery。请帮助一些人通过例子让我理解。谢谢