标签: amd

AMD/Dojo 1.7单页应用程序:在哪里放置Require()的?

我有一个大型单页应用程序,我正在迁移到Dojo 1.7/AMD加载器语法.

我有一个主要的JSP加载所有内容,然后是一个用于动态内容生成的大量JSP页面.

在整个应用程序或每个必需模块的实例周围添加require(){}块是否是更好的设计决策?

还是一些组合?将最常见的require()添加到主页面,然后查找需要包装的其他实例?

javascript dojo amd

5
推荐指数
1
解决办法
391
查看次数

使用Angular JS时如何加载AMD模块?

出于某些奇怪的原因,Angular JS拥有自己的模块系统,既不是AMD也不是CommonJS.

我有许多AMD格式的现有模块.我想在Angular应用程序中使用它们.

我想避免重写任何AMD模块.如果可能的话,我也想避免使用Angular自己的模块系统.

使用Angular时是否可以使用AMD模块?是否可以避免Angular的自定义模块系统?

module amd commonjs angularjs

5
推荐指数
1
解决办法
4840
查看次数

是否可以在测试中设置amdefine,以便我不必在所有模块文件中定义它?

我有一组使用浏览器端但使用mocha测试服务器端的对象.我正在使用require.js进行AMD加载.Require.js站点建议在服务器端使用amdefine来获取定义的模块在node.js中使用这段代码:

if (typeof define !== 'function') {
    var define = require('amdefine')(module)
}
Run Code Online (Sandbox Code Playgroud)

好.但我必须把它放到我想在Node中使用的每个模块中.在我的情况下,这意味着我必须将其从我使用客户端(大部分)的任何代码中删除.

我想知道是否有任何方法可以将这一大块代码放入我的测试中,这样我就不必将它放在我的客户端代码中.在我的文件中只有测试所需的代码似乎很愚蠢 - 将它放在测试代码中更有意义.但是,当我这样做时,我收到一个错误:

Error: amdefine with no module ID cannot be called more than once per file.
    at runFactory (/home/vmplanet/dev/alpha/web/node_modules/amdefine/amdefine.js:159:23)
    at define (/home/vmplanet/dev/alpha/web/node_modules/amdefine/amdefine.js:275:13)
    at Object.<anonymous> (/home/vmplanet/dev/alpha/web/assets/src/coffee/delta/dataLayer.coffee:4:3)
    at Object.<anonymous> (/home/vmplanet/dev/alpha/web/assets/src/coffee/delta/dataLayer.coffee:158:4)
    at Module._compile (module.js:456:26)
    at Object.loadFile (/usr/lib/node_modules/coffee-script/lib/coffee-script/coffee-script.js:179:19)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
Run Code Online (Sandbox Code Playgroud)

这是一个奇怪的错误,因为amdefine代码只在一个地方 - 测试文件的顶部.有没有办法把这个amdefine代码放在我的测试中,只有我的测试,仍然可以让测试运行服务器端 - 而不必去除客户端的amdefine代码?

amd mocha.js node.js requirejs amdefine

5
推荐指数
1
解决办法
579
查看次数

如何定义模块并在AMD的dojo中使用它?

我正在维护和扩展一个AMD之前的旧项目.我想在应用程序中添加一个图表.为此,我创建了一个js文件,如下所示:

define(["dojox/charting/Chart",...."dijit/Dialog","dojo/dom-construct"],
    function (Chart) {

    function showDailyChart(data){
       //code to show the chart in a dialog
     }
    return customModules.singleChart;
});
Run Code Online (Sandbox Code Playgroud)

我已将此文件另存为 /customModules/singleChart.js

在我的主HTML页面中,我已将其添加到包中,如下所示:

var dojoConfig = { parseOnLoad: true,
        packages: [....,{"name":"customModules",
             "location":location.pathname.replace(/\/[^/]+$/, "")+"/modules" }
                         ]};
Run Code Online (Sandbox Code Playgroud)

我想称之为的功能是AMD之前的功能.所以我称之为:

dojo.require("customModules.singleChart");
.
.
.
customModules.singleChart.showDailyChart(data);
Run Code Online (Sandbox Code Playgroud)

我可以看到它/customModules/singleChart.js在Firebug控制台和Net Tab中加载.但是没有任何customModules.singleChart对象.奇怪的是,也没有错误.我在Firebug中测试了这个,以及谷歌Chrome的开发者工具.

使用AMD模块的正确方法是什么dojo.require?或者有更好的方法来做我需要的吗?

dojo amd

5
推荐指数
1
解决办法
5230
查看次数

避免使用requirejs加载已经注入DOM的模块

有没有办法避免加载已存在于DOM中的模块?

例:

require.config({
  paths: {
    // jquery here is needed only if window.jQuery is undefined
    'jquery': '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min'
  }
});
Run Code Online (Sandbox Code Playgroud)

能够使用这个片段之类的东西会很棒

require.config({
  paths: {
    'jquery': {
       uri: '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min',
       // if this function returns false or undefined load the script from the url
       define: function(){ return window.jQuery; } 
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

-------------------------------------------------- ---------------

UPDATE

-------------------------------------------------- ---------------

我和我的提议在github https://github.com/jrburke/requirejs/issues/886上向@jrburke发送了拉取请求.requirejs的固定版本可以在这里测试:

http://gianlucaguarini.com/experiments/requirejs/requirejs-test3.html

这里根据我的API提议配置requirejs

require.config({
  paths: {
    // jquery here is needed only if window.jQuery is undefined
    'jquery':'//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min',
    'lodash':'//cdnjs.cloudflare.com/ajax/libs/lodash.js/2.0.0/lodash.underscore.min',
    'backbone':'//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone-min'
  },
  shim:{
    'jquery':{
      // with …
Run Code Online (Sandbox Code Playgroud)

javascript amd requirejs

5
推荐指数
1
解决办法
3572
查看次数

在<head>或页面底部的RequireJS脚本标记?

RequireJS脚本标记应该位于<head>HTML页面的底部还是底部?

<script data-main="resources/js/main" src="require.js"></script>
Run Code Online (Sandbox Code Playgroud)

我见过有信誉的来源将RequireJS脚本标记放在任何一个位置,但没有信誉良好的来源似乎明确说明理想位置在哪里.

标记放在头部的参数是,在页面继续加载时,RequireJS可能已经开始异步加载和执行依赖脚本(尽管这种增益可能微不足道).

标记放置在页面底部的参数将是在模块内不需要检查准备好的DOM(但如果在加载模块的第三方系统中使用该模块,则不包括此检查可能会导致问题<head>标签中的脚本).

javascript dependencies dom amd requirejs

5
推荐指数
1
解决办法
2094
查看次数

JSDoc3:如何记录返回函数的AMD模块

我正试图找到一种使用JSDoc3记录AMD模块的方法.

/**
 * Module description.
 *
 * @module path/to/module
 */
define(['jquery', 'underscore'], function (jQuery, _) {

    /**
     * @param {string} foo  Foo-Description
     * @param {object} bar  Bar-Description
     */
    return function (foo, bar) {
        // insert code here
    };
});
Run Code Online (Sandbox Code Playgroud)

可悲的是,http://usejsdoc.org/howto-commonjs-modules.html上列出的模式都不适用于我.

如何生成一个适当的文档,列出模块导出的函数的参数和返回值?

javascript amd jsdoc requirejs jsdoc3

5
推荐指数
1
解决办法
518
查看次数

使用带有Gulp的requirejs优化器节点模块

gulp-requirejs插件,但它被列入黑名单,并显示以下消息:" 直接使用require.js模块".

文档非常稀疏,我如何最好地将它与Gulp构建任务结合使用?

文档中有一个例子:

var requirejs = require('requirejs');

var config = {
    baseUrl: '../appDir/scripts',
    name: 'main',
    out: '../build/main-built.js'
};

requirejs.optimize(config, function (buildResponse) {
    //buildResponse is just a text output of the modules
    //included. Load the built file for the contents.
    //Use config.out to get the optimized file contents.
    var contents = fs.readFileSync(config.out, 'utf8');
}, function(err) {
    //optimization err callback
});
Run Code Online (Sandbox Code Playgroud)

但这对我没什么帮助......这是我最好的尝试:

var gulp = require('gulp'),
    r = require('requirejs').optimize;

var config2 = { …
Run Code Online (Sandbox Code Playgroud)

amd requirejs r.js gulp

5
推荐指数
2
解决办法
5958
查看次数

webpack和amd模块集成

我在Web应用程序中有以下场景:

我有一些包含多个amd模块的外部js文件(它们是由typescript生成的,但我现在不想使用ts-loader).这些文件中的每一个都包含多个amd模块,例如:

define("Namespace/Module1", ["require", "exports"], function (require, exports) {
    ....
}
define("Namespace/Module2", ["require", "exports"], function (require, exports) {
    ....
}
Run Code Online (Sandbox Code Playgroud)

在我的主应用程序中,我使用这些文件请求导出的模块

var a = require("Namespace/Module1").
Run Code Online (Sandbox Code Playgroud)

我使用SystemJs直到现在,使用正确的配置,一切正常,但我想开始使用webpack进行捆绑,我不知道如何将这些文件添加为"require"依赖项.

我尝试在导入requireJS后将它们添加为脚本标记,但(当然),webpack加载程序使用自己的"require"加载程序,但它不起作用.

在webpack配置中使用externals使得webpack认为它们不是模块,而是全局变量,因此它从生成的bundle中排除require("aaa")并期望全局aaa变量

function(module, exports) {

     module.exports = aaa;

}
Run Code Online (Sandbox Code Playgroud)

我如何告诉webpack,当他生成我的包时,他仍然应该使用require("命名空间/模块")但之前,在我的外部文件中调用所有" define "?

我希望我的解释是足够的,如果我做错了什么,如果我遵循不良做法,或者其他什么,请解释.

提前致谢

amd requirejs webpack

5
推荐指数
0
解决办法
350
查看次数

OpenGL渲染nVidia和ATI之间的差异

最近我更新了ATI驱动程序(Iam使用HD7970)到最新的驱动程序,我的一些OpenGL项目的objetcs停止工作.他们在nVidia最新驱动程序上工作的更多(在960米上测试).我应该知道ATI和nVidia渲染管道之间有什么区别吗?

附加信息:

  • glGetError()没有错误,
  • 着色器正确编译和链接,
  • 其他渲染对象工作正常,但VBO填充和绘图命令是不同的.工作一个从*.obj文件加载并由glDrawArrays()绘制.破碎的VBO由polygonizator(计算着色器)填充,它从用于存储的image2D获取顶点并由glDrawElements()绘制,
  • 用我最简单的可能的gpu debbuger我检查了顶点和片段着色器是否正在启动.

当我尝试用三角形绘制时我什么都没看到,但是当我切换到GL_POINTS时,我看到绿点(碎片着色器的输出是纯绿色通道)正在按原样移动.这可能表明顶点着色器正在进行,因为正在发生MVP乘法.这些是具有一个大VBO的行星LOD对象,因此我使用一个函数来绑定所有缓冲区,而另一个函数用于绘制必要的高度图.VBO大小为128MB

初始化:

glGenBuffers(1, &VBO);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, VBO);
glBufferData(GL_SHADER_STORAGE_BUFFER, size * sizeof(vec4), NULL, GL_DYNAMIC_COPY);

glGenBuffers(1, &IndexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IndexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexSize * sizeof(unsigned int), NULL, GL_DYNAMIC_DRAW);

glGenBuffers(1, &Normals);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, Normals);
glBufferData(GL_SHADER_STORAGE_BUFFER, size * sizeof(vec4), NULL, GL_DYNAMIC_COPY);
Run Code Online (Sandbox Code Playgroud)

通过polygonizator(计算着色器)填充VBO:

    #version 430 core
layout( std430, binding=1 ) buffer ParamsBuffer
  {
    float size;
        uint index;
        int parentIndex;
        uint textureSize;
        vec4 upVector;
        vec4 Position;
        vec4 quadrant;
  };
  layout( std430, binding=2 ) buffer VertBuffer
  {
    vec4 VBO[ ]; 
  };

  layout( std430, binding=3 …
Run Code Online (Sandbox Code Playgroud)

c++ opengl amd ati

5
推荐指数
0
解决办法
407
查看次数