问题标签 [amd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 仅使用环境定义导入 TypeScript 模块以在 amd 中使用
我有一个依赖于Backbone
. 我有一个backbone.d.ts
定义,但 TypeScript 似乎不想编译我的模块,除非我的
实际上指向一个有效的主干模块而不是定义文件。我正在使用 AMD 加载的模块,并为骨干定义了一个 requirejs 垫片。
除了创建假主干.ts 模块定义之外,还有其他解决方法吗?
更新:解决方案的副作用是这样的代码不再有效,因为模块不再存在。由于requirejs shim,它需要存在。我知道的唯一解决方法是拥有两个 .d.ts 文件。一个用于使用主干作为不包含该declare module
位的导入的文件。另一个使用 a/// <reference
确实包括该declare module
行。
javascript - Javascript 客户端/服务器模块约定
是否有编写可在客户端和服务器上使用的 Javascript 中间件库的约定?
假设我们有一个数据抽象层,我们称之为JEFRi。JEFRi 运行时需要在客户端和服务器上运行相同,以便使用 DAL 的应用程序的所有部分都可以引用相同的实现、API 等。JEFRi 具有依赖项(特别是下划线),并且具有依赖于的子模块它(Mongo 存储、LocalStore 存储)。
可用于在浏览器和节点之间实现最简单的代码共享的最直接模式是什么?
它应该:
- 可以使用 NPM 安装在服务器上
- 可以使用 CommonJS
require()
调用在服务器中加载 - 可以使用以下之一为浏览器项目安装:ender、bower、npm
- 通过复制文件中没有库依赖项的 .min.js 可以为浏览器项目安装。
- 可以使用标签在页面上加载
<script>
(并在全局范围内注册自身) - 可以使用 AMD 加载到页面上
define()
并require()
调用
任何数量的构建步骤都是可以接受的,例如在必要时调用 r.js。
node.js - 如何建立可重用的模块化 CoffeeScript 项目
我有一个 CoffeeScript 项目(称为 jAddressParser),我希望将其变成可重用的模块。不幸的是,我不太熟悉如何为这样的目的模块化 CoffeeScript,同时保持与现有项目的合理互操作性。
有问题的项目解析地址字符串-可以肯定的是,没有短顺序。但是,出于我正在从事的项目的目的,这种策略应该有效,并且其他人可能会从中受益,也许其他人可能会做出一些有用的贡献。每个人都赢了!
所以我所拥有的是在这样的目录中布局的代码:
在理想的世界中,我的工作流程是这样的:
从命令行测试上面的 javascript。我认为Node.js是最合适的方式。
将文件编译
/src
成一个/build/jAddressParser.js
文件。我认为r.js会很好地解决这个问题。一切准备就绪后,将 复制
jAddressParser.js
到/build
我的 Web 项目中。通过适当的调用将 jAddressParser 包含在我的 Web 项目中
requirejs
(即它可以支持 AMD),例如require(['jAddressParser'], -> ...)
由于似乎我必须包含依赖项(lodash、requirejs、require-cs、XRegExp、CoffeeScript),我希望我可以通过将特定版本放在/lib
目录中或使用 git 子模块来做到这一点(尽管子模块似乎有点矫枉过正对于这么小的项目)。
我从未创建过可重用的 CoffeeScript 模块,而且我基本上无法找到关于如何为 web 模块执行相同操作的良好参考(对于仅限 node.js 的项目似乎有一些不错的示例 - 以为我肯定会很想看到更多的列表)。如果您有任何想法或参考资料可以阐明上述提案的可行性,或者您自己如何组织这样的项目,我将不胜感激?
backbone.js - 如何使用启用 require.js 的 yeoman 引导 Backbone 应用程序
我现在和约曼一起玩了一段时间。我想知道如何完成引导 Backbone 应用程序并同时启用 require.js。
为我提供了一个设置,我可以在其中使用 AMD 风格的模块。
为我提供了一个 Backbone 脚手架,但我必须在 index.html 中手动“包含”我所有的模型、集合等。
有没有办法两者兼得?
问候菲利克斯
javascript - 通过 CORS 加载远程 AMD 兼容模块?
我目前没有在我的任何项目中使用 AMD,但我确实必须动态加载大量 javascript 文件,因为用户可以在运行时加载可能在 3rd 方站点上定义的插件。
然而,我正在研究 AMD 如何帮助我,因为我目前使用 yepnope 动态加载几乎所有资源,这工作正常,当我想加载远程插件时,我可以动态告诉 yepnope 去获取描述符,然后获取所需的文件(这是一个手卷插件系统,所以不要太担心它)。因此,该场景将使用大量本地模块,但也允许动态加载新模块。
现在根据我的理解,就 AMD 而言,您可以在文件中编写定义,然后包含一些与 AMD 兼容的加载器,并在您想要访问代码中的底层模块的任何地方(在回调中)使用您的 require 方法。现在答案可能最终变得依赖于框架,因为我相信 AMD 兼容的加载器处理映射require("some/module/name")
到some-module-name.js
或任何它,所以我假设有一个基本路径告诉加载器在哪里寻找底层文件,所以制作一个假设所有加载器都是这种情况,您如何应对想要加载远离默认路径的模块的用例?
如果这是特定于框架的,我再次道歉,并且非常乐意将问题更改为“你如何使用 CURL 等做到这一点”,但由于我对它没有 100% 的理解,我猜它会落入AMD 兼容气泡。
javascript - 如何在单页应用程序上使用 AMD 来仅加载某些依赖项
据我了解,使用 AMD 管理加载的依赖项的一个好处是,但是在使用 require.js 的单页应用程序中,所有依赖项都将被加载。
例如使用主干或类似的东西,假设我有以下文件
main.js 需要 router.js
router.js 需要 view_a.js 和 view_b.js
router.js 呈现视图
现在让我们说我去example.com/#view_b
哪个只需要代码view_b.js
但不使用view_a.js
. 无论如何只view_b.js
使用 require.js 或类似的东西加载或优先加载?
ajax - 将信息从一个 Dojo AMD 模块传递到另一个
我正在使用 Dojo 1.8 中的模块,并且我有一个这样定义的模块:
我有另一个模块,我想在其中调用该方法然后使用它:
当然,我可以将 DOM 创建代码放入 util 模块中,但这是在不应该的地方混合视图逻辑。如果我想重用 util.getDirList 方法,那就太可怕了。
如何使用该方法返回的 JSON?还有其他人这样做吗?
javascript - 是否可以将模块加载作为一个承诺来实现?
我已经构建了一个单页应用程序,用户可以在其中构建报告。用户会看到一个表单,允许他们选择数据源、图表类型和主题,然后在确认页面加载所需的文件并绘制图表。
为了获得更好的性能,我想并行加载代码模块和数据。例如,如果用户选择“饼图”、“蓝色主题”和“航空公司统计”:
WHEN(加载js模块饼图)和(加载蓝色主题css)和(加载Airline Stats json)
THEN(绘制图表)
我发现了许多实现 AMD 的库,以及许多实现承诺的库,但没有一个库可以像上面的示例那样组合模块加载和承诺。这可能吗,是否有任何库已经实现了这一点?
我需要的是客户端 JavaScript。
javascript - 需要映射:映射扩展时获取模块超时
我有一个 Mediator-Sandbox 库和一个构建在这个库之上的路由器扩展。
该库是这样构建的:
扩展看起来像这样:
加载扩展所需的配置如下所示:
我现在可以使用我的完整库:
当我取消注释地图配置时,我可以通过这种方式使用带有路由器扩展的完整加载模块:
比我得到一个模块超时。
我究竟做错了什么?
javascript - 如何在基于 Backbone.js 的应用程序中干净地获取 401
在我的基于 Backbone.js 的应用程序中,我正在与我的 API 交谈,该 API 以 401 响应,以防在没有或使用无效身份验证令牌的情况下发出底层请求。每次收到 401 时,我想通过导航到 #login 页面来检测它。
为了获取 401,我成功地包装了 Backbone.sync,但那时我有点卡住了。我在这里尝试了几种策略:
throw 'unauthorized'
在 Backbone::sync 中向下并尝试在我的路由器中获取。失败:“未获授权”尝试
#.navigate '#login'
在 Backbone::sync 中关闭,这不仅看起来很奇怪,而且伴随着我的应用程序基于 AMD/require.js 的问题,我不能简单地在我的包装sync
函数中访问我的 Backbone.Router 实例。
到目前为止,我看到的唯一解决方案是创建一个“全局可用”的缓存对象,它获取对我的路由器实例的引用,然后将其define
作为依赖项放入需要的地方。那个缓存对象必须是一个单例并且破坏了我的整个“请禁止全局和禁止命名空间”策略。
我有点卡在这里。谁能指出我对这个常见问题的更干净的解决方案?