Articles of amd

NodeJS /浏览器交叉开发

我正在研究针对浏览器和NodeJS应用程序的库。 模块使用AMD惯例,它在理论上足够灵活,足以映射今天的任何情况。 源文件然后将被转换为工具分发给不同的平台 – 再次浏览器和NodeJS。 顺便说一下,有一个叫做uRequire的奇妙工具可以帮助我,但是我仍然不确定我的最佳select,所以我在这里要求相关的经验。 这里是我有的文件层次结构: – bower_components/ – eventemitter2/ … – lodash/ … – source/ – library/ – lodash.js -> ../../bower_components/lodash/dist/lodash.js – EventEmitter.js -> ../../bower_components/eventemitter2/lib/eventemitter2.js – Observable.js: define(["lodash", "EventEmitter"], function(Utility, EventEmitter) { function Observable(options) { … }; return Observable; }); 最后,浏览器和NodeJS双方的最大区别是: 浏览器端: EventEmitter实现只是被configuration为“library / EventEmitter”的eventemitter2浏览器模块。 EventEmitter端: EventEmitter从require("events").EventEmitter , events是本地包,不是本地文件或模块。 所以,我的问题是:我怎么可以有Observable对象与NodeJS工作没有大规模的修补? 我不知道如何使EventEmitter实现可用于我的模块,因为它不是一个本地模块(因为我不能写任何path映射),而且它不是直接模块本身,我们将使用,但它的“EventEmitter”属性… 任何帮助/思考,将不胜感激。 我相信很多人都跑了类似的情况,我很想知道他们要说什么!

在NodeJS中运行browserify-ed应用程序

这可能听起来有些不正常,但我想调整一个非常大的JavaScript代码库的一部分,以便它可以在NodeJS上运行。 代码是用CommonJS风格编写的,使用了一个使用deamdify和deamdify构build过程。 我没有设置任何东西,我只是熟悉AMD和CommonJS模式。 我想这样做是为了将一些代码转换为服务器端的API,但是仍然需要能够在浏览器中运行。 起初,我以为我可以简单地使用库,而不运行browserify,但我碰到这样的错误: ReferenceError:define没有定义 因为有些库是这样写的: /*global define*/ define([ './defaultValue' ], function( defaultValue) { "use strict"; 所以它看起来像我需要运行deamdify ,这是一个deamdify转换…因此,我需要运行browserify? 然而,其中一个缺点似乎是,它生成了一个单一的Javascript文件(当然),然后全部parsing,并失败,因为它包含对不存在的浏览器对象( document.location )的引用。 我希望只是不使用引用浏览器对象的代码位。 所以我的问题: 有没有关于如何进行的指导? 任何教程? 我在Google上找不到太多东西,但我可能会用错的。 是否有一个NodeJS等效于Browserify? 这似乎有点奇怪,没有必要build立一个单一的Javascript文件,然后运行服务器端。 任何指导,build议等非常受欢迎。

要求:访问/列出所有加载的模块

我在我有以下代码的情况: define([ "require", "./module1/module1", "./module2/module2", "./module3/module3", // … // hundreds of modules here (with their path) // … ], function ( require, module1, module2, module3, // … // hundreds of modules's name here // … ) { var myMod = function() { myMap = { | "module1": new module1(), | This is the part "module2": […]

在运行时和unit testing问题上需要文件

我使用require.js在运行时加载文件,如下所示:当我在正确的上下文中运行文件(我的意思是来自正确的path的调用)时, 按预期工作 。 module1.js define(["otherModule"], function(otherModule) { working!!! …. 现在我想创build一个unit testing从这个文件(模块1)从其他上下文(从在不同的位置在项目中find的testing文件夹),我得到错误 require.js:145 Uncaught Error: Script error for: otherModule 由于它试图在位于不同的项目结构中的unit testing期间在此path上运行get … HTTPS://app/path1/path2/path3/otherModule.js 而在运行时 (从不同的上下文),它在path中find它 HTTPS://app/path1/path2/path3/path4/path5/otherModule.js 请求中有额外的path4和path5,我应该如何解决它在两种情况下工作(UT / Runtime)? http://requirejs.org

在服务器和客户端之间共享JavaScript模型代码,这种方法是否有效?

我开始学习Node.js和Backbone。 我想分享服务器和客户端之间的一些代码(涉及[1]和[2] )。 更深层次: 共享模型的默认值 。 默认值用于填充表单(客户端),而在服务器端执行 共享validation规则 ,以便DRY并执行客户端/服务器validation 共享实例方法 所以我的想法是使用factory对象封装通用代码(默认,validation规则,公共实例方法),并根据环境(Node.js或AMD模块)调整factory对象。 此代码是快速和肮脏的,可能无法正常工作。 这是一个好方法还是浪费时间? (function (factory) { if (typeof exports === 'object') { // Node.js var config = require('../config/config.json'), Sequelize = require('sequelize'), _ = require('underscore'); var User = { receiveSms: { type: Sequelize.BOOLEAN, allowNull: false }, receiveNewsletter: { type: Sequelize.BOOLEAN, allowNull: false } }; // Add […]

导出一个节点模块作为唯一的实例

我正在使用restify在节点中编写一个基本的REST API框架。 为了支持这个,我有几个帮助对象,我导出和要求。 我无法理解如何以这样一种方式要求这些对象,即每个传入的HTTP请求使用唯一的助手对象实例。 实际上,我需要()模块在GET请求的范围之内,但是我觉得这不是最好的做法。 例如: helper.js var helper = function(){ this.foo = new Date().getTime(); return this; }; helper.prototype.test = function(){ return new Date().getTime(); }; module.exports = new helper(); main.js app.get("/", function(req, res){ var helper = require("./helper"); helper.test(); }); helper.test()工作原理:每个传入的请求都有它自己的帮助程序的作用域实例。 如果我需要请求范围之外的帮助程序文件,则由于节点caching所需文件的对象的方式,帮助程序对象内的数据将在请求之间共享。 但是,在这种情况下,helper.foo对于每个调用都是一样的,大概是因为require()调用通过“new”关键字接收1个实例。 我遇到这个问题时,我有一个帮助函数,使用随机string命名文件,但因为我已经声明它像(下),所有的文件被命名为相同的。 helper.prototype.fileName = random(10) + ".json"; 在请求范围内是否需要文件会产生任何负面影响? 我会想象,当处理高频率stream量时,对于每个呼叫请求文件都不是理想的。 当通过express或restify考虑多个传入的HTTP请求时,需要/导出模块的最佳实践是什么? 我应该确保我写的帮手不处理这些边缘情况吗?

使用导入时,TypeScript将不会parsing模块

// Modules/MyModule.ts ——————————– import fs = require("fs"); module Hello { export function World(): string { return "Hello World"; } } // Main/App.ts —————————————- console.log(Hello.World()); // Cannot find name 'Hello' 出于某种原因,这会产生上面指定的错误。 奇怪的是,如果我取消注释导入声明,我不会得到这个错误了。 (反正没用过) 两者都产生相同的错误: tsc Main/App.ts –module "commonjs" tsc Main/App.ts –module "amd" 这真的是一个编译器错误,或者我错过了一些东西。 我是否需要指定外部模块需要不同?

生成,编译JavaScript库

我有一个目前使用requirejs的JavaScript库。 为了保持可读性,我把所有内容都写入了目录。 现在我想将所有的模块一起编译成一个用于生产的JavaScript文件,但是这些文件仍然可以工作,不需要编译进行开发,这样我就不必在testing某些东西时重新编译所有的东西。 我如何完成这项任务?

VS代码AMD模块系统

我正在使用TypeScript来处理Electron应用程序,并且在尝试找出要使用的模块加载系统时遇到了一些问题。 我一直在深入研究VS Code代码(因为许多人认为它是电子应用程序的“海报小孩”),以便更好地理解约定/做某些事情的最佳方法,我注意到他们正在使用AMD模块(在src下的tsconfig.json文件中,选项"module": "amd" , "moduleResolution": "classic"和"baseUrl": "."都设置了),它们似乎正在使用requirejs-like调用某些东西,比如将URL加载到BrowserWindow中,在那里使用require.toUrl('vs/workbench/electron-browser/bootstrap/index.html'); 获取完整的URL加载。 从我的(理所当然有限的)理解,这解决了一个问题,我运行到我的TypeScript(位于src目录)编译到输出目录(调out ),然后提供.js文件电子执行,这意味着我的path像mainWindow.loadUrl(__dirname + '/index.html') out/index.html mainWindow.loadUrl(__dirname + '/index.html')突然指向out/index.html而不是预期的src/index.html 。 但是,当我通过VS代码项目searchrequirejs模块的任何参考,我找不到任何东西,除了包含此代码的require.d.ts文件 declare var define: { (moduleName: string, dependencies: string[], callback: (…args: any[]) => any): any; (moduleName: string, dependencies: string[], definition: any): any; (moduleName: string, callback: (…args: any[]) => any): any; (moduleName: string, definition: any): any; (dependencies: string[], […]

用于Node.js的Typescript AMD模块

我有我用AMD模块编译的以下Typescript文件: import tsmx = module("../TSMX/tsmx"); tsmx.createServer(1337); 产生以下js: define(["require", "exports", "../TSMX/tsmx"], function(require, exports, __tsmx__) { var tsmx = __tsmx__; tsmx.createServer(1337); }) 当我尝试加载它在Node.js我得到以下错误: (函数(exports,require,module,__filename,__dirname){define([“require ^ ReferenceError:define is not defined at Object。(C:\ DB \ Repo \ TSMX \ TSMX \ TSMXTest \ app.js:1:63 )在Module.load(module.js:356:32)上的Module._compile(module.js:456:26)位于Function.Module的Object.Module._extensions..js(module.js:474:10)在node.js:901:3启动时(node.js:119:16)的Function.Module.runMain(module.js:497:10)处的_load(module.js:312:12) 如何使这个工作,并得到“定义”定义? 我需要AMD模块,因为我会在浏览器中加载一些代码。 我来自C#和AS3其中import/命名空间是很容易很抱歉,如果这是一个业余爱好者的问题。 编辑:按照http://requirejs.org/docs/node.html#nodeModules的build议,我添加到文件的顶部: if (typeof define !== 'function') { var define = require('amdefine')(module […]