Articles of amd

使用导入时,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 […]

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

我有一套使用浏览器端,但testing服务器端与摩卡的对象。 我使用require.js进行AMD加载。 Require.js网站build议在服务器端使用amdefine来获取定义的模块在node.js中的这一点代码: if (typeof define !== 'function') { var define = require('amdefine')(module) } 好。 但是我必须把它放到我想在Node中使用的每个模块中。 在我的情况下,这意味着我不得不从我使用客户端(大部分)的任何代码中删除它。 我想知道是否有任何方法把我的testing中的代码块,所以我不必把它放在我的客户端代码。 在我的文件中只有testing需要的代码似乎很愚蠢 – 把它放在testing代码中更有意义。 但是,当我这样做,我得到一个错误: 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 […]

Javascript:在AMD(asynchronous模块定义)中是'require'同步方法吗?

在AMD(asynchronous模块定义)中是否需要同步? 如果是这样,是什么使这个规范asynchronous? 如果我在代码中间要求()(还没有加载),它会停止执行吗? 在说浏览器端。

是否已有用于支持Dojo AMD,NodeJS require和Browser window的预先存在的代码

我有一些代码,支持编写一个微库,并在Dojo AMD,NodeJS require()和浏览器正常窗口中加载它。[但是我想知道是否已经build立了这样的方法,我只是重新发明了轮子,或者如果代码是值得的。 我在互联网上做了一个很好的search。 我创build的代码是在https://gist.github.com/forbesmyester/5293746 ,如果人们有评论,很好,但我更有兴趣找出是否有适当的方法来做到这一点。

包装许多内部模块输出打字稿

我正在查看在节点内使用打字稿,目前我习惯通过纯粹使用内部模块的///<reference…/>语法来使用打字稿。 但是,对于较大的项目,这可能会变得笨重,因为您可以使用引用其他模块的模块来引用相关链接。 因此,对于这个节点项目,我正在考虑尝试将所有逻辑组件作为内部模块/类进行分组,所以它们将全部在内部互相引用,而通过一个外部模块公开它们,从而暴露底层类等。 这种方式的语法将非常类似现有的需要机制的节点,如: import database = require("my-external-db-module.ts"); var connection = new database.Connection(someUrl); 而不是 ///<reference path="my-internal-db-modules.ts" /> var connection = new Database.Connection(someUrl); 我想象的语法是这样的: ///<reference path="all-my-internal-module-files-etc.ts" /> ///<reference path="…" /> export module SomeExposingModule { // Not quite sure what to put in here to expose the internal modules } 那么,围绕这类事情或其他任何类似的事情有什么最好的做法,或者每个人都坚持使用内部模块来做复杂的事情吗?

如何编写一个与Node.js,RequireJS一起工作的模块

我正在处理JSON / XML处理的JavaScript库。 我的图书馆工作在浏览器以及Node.js(与xmldom和xmlhttprequest模块)。 其中一名用户最近要求RequireJS支持。 我已经看了RequireJS / AMD的东西,认为这是一个很好的方法,所以我想提供这个。 不过,我想保留可移植性:我的库必须在浏览器(有和没有RequireJS)以及Node.js中工作。 而在浏览器环境中,我不依赖于xmldom或xmlhttprequest因为这些东西是由浏览器本身提供的。 我的问题是:如何实现我的库,以便它可以在浏览器以及Node.js中使用,而不需要RequireJS? 一点历史和我目前的解决scheme 我最初写我的浏览器库。 所以它只是创build一个全局范围的对象,并把它放在它的一切: var Jsonix = { … }; 稍后用户请求Node.js支持。 所以我补充说: if(typeof require === 'function'){ module.exports.Jsonix = Jsonix; } 我还不得不导入上面提到的几个模块。 我有条件地做了,取决于requirefunction是否可用: if (typeof require === 'function') { var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; return new XMLHttpRequest(); } 现在有了RequireJS这个故事。 如果RequireJS存在,那么require函数也存在。 但是,模块加载工作方式不同,我必须使用define函数等。我也不能只require东西,因为require在RequireJS有一个asynchronousAPI。 此外,如果我的库通过RequireJS加载,它似乎处理源代码,并检测require('something')即使我有条件地 if (typeof require === 'function' […]

是否可以在同一个Typescript项目中混合使用AMD和CommonJS模块

我试图将Durandal与使用Typescript的node.js服务器集成,以在服务器和客户端定义模块。 我遇到的问题是,Durandal强烈依赖RequireJS和AMD定义模块的方式,我不想在服务器端引入它,因为它使用RequireJS,所以我没有机会运行CommonJS-ish模块在客户端(默认为node.js)。 在棺材的最后一个钉子是,我发现没有办法定义哪些文件应该被编译为AMD模块,哪一个作为CommonJS由TSC – 这似乎是一个最简单的解决scheme。 我不认为分离客户端部分和服务器部分是一个选项,因为很多代码将是通用的两个部分。 所以,我的问题是三重的: 有没有在同一个Typescript项目中混合使用AMD和CommonJS模块的方法(最好使用NodejsTools) 如果没有,是否有办法强制Durandal使用CommonJS文件来加载视图/ viewmodels等等 如果这些都不可能的话,那么在node.js服务器上使用AMD模块是可能的(也是明智的 ) 任何想法,高度赞赏