问题标签 [commonjs]

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.

0 投票
1 回答
1973 浏览

titanium - Appcelerator 和 CommonJS 模块(缓存和循环引用)

事情是这样的:

我正在使用 CommonJS 方法使我的移动(iPhone/Android)应用程序模块化。那里并不奇怪。但是有一件事我就是想不通。

CommonJS 让我可以创建 STATIC 私有变量,这让我可以轻松创建单例。我认为这至少是因为获取require()d 的文件的内容只读取一次,然后每次都返回导出对象(仅初始化一次)。

但是当我创建如下所示的循环引用时,每次都会执行包含模块内的代码。

等等...... 有趣的是,当我写这个问题时,我突然意识到require()在下一个开始之前没有一个调用完成(因此下面显示了堆栈溢出)。

关于我是否走上正轨有什么想法吗?这里已经过了凌晨 5 点,所以就我而言,所有的赌注都被取消了:D。

例子:

看这段代码,它定义了一个单例:

require()这个文件是这样的:

输出是:

为什么像下面这样的循环引用不起作用?(我自己可能已经对此进行了分析,如果你愿意,可以评论/回答)。

应用程序.js

菠萝.js

香蕉.js

因为输出是这样的:

0 投票
1 回答
249 浏览

javascript - 如何使用 CommonJS 在 Spine 中要求 Stylus?

我想在我的 Spine 应用程序中使用javascript API Stylus 提供。

为此,我必须使用 Stylus。

因为 Stylus 是 Hem 的依赖项,所以我尝试在 index.coffee 中要求它:

但这导致了一个错误:

然后我尝试在 package.json 中独立包含 Stylus

在我的 slug.json

但这导致服务器日志中出现错误:

我如何需要 Stylus 并在 Spine 中使用它的 API?

0 投票
3 回答
6733 浏览

javascript - Java 7 + Rhino 1.7R3 对 CommonJS 模块的支持?

我需要帮助 CommonJS 在 Java 7 和 Rhino 1.7R3 上工作。

Rhino 1.7R3 支持 CommonJS 模块:

Java 7 与 Rhino 1.7R3 捆绑在一起。不幸的是,Java 7 的 Rhino 是一个修改版本,它不包含该org.mozilla.javascript.commonjs包:

我想通过javax.scriptAPI 使用 Rhino 1.7R3 对 CommonJS 的支持,如下所示:

(我通过验证ScriptEngineManager我确实在使用 Rhino 1.7R3 引擎。)我想也许我可以将以下依赖项添加到类路径中

和 CommonJS——特别是require()——将开始工作。但事实并非如此。当我尝试使用时,require()我得到

如何让 Java 7 与完整版的 Rhino 1.7R3 一起工作,以便获得 CommonJS 支持?

编辑:我发现了以下问题,它涉及完全相同的主题:

健全性检查:Rhino 没有 require 函数,对吧?

受访者建议也许可以用 CommonJS Rhino 1.7R3 替换有限的 Rhino 1.7R3,但没有说明如何做到这一点。这就是我在这里要问的。

0 投票
3 回答
3109 浏览

node.js - CoffeeScript 和 NodeJS:如何导出多个类?

我想导出一些类,比如说,DogCat. 解决此问题的一种方法是:

如何在不输入两次类名的情况下做类似的事情?

0 投票
1 回答
856 浏览

javascript - WinJS.Promise 没有像我预期的那样工作

我正在使用 Windows 8 JavaScript 应用程序,但 WinJS.Promise 没有按预期工作。这是我的异步方法...

这就是我所说的......

这是在按钮单击中。我希望我的状态 div 在单击按钮后非常简短地说“工作”,然后说“空闲”5 秒,最后在 5 秒延迟完成时说“完成”。相反,UI 线程阻塞了 5 秒,然后状态 div 显示“空闲”。

我认为执行将返回到将状态设置为“free”的行,但调试表明它在此之前达到了 promise 函数。因此状态在 5 秒后设置为“完成”,然后设置为“空闲”。换句话说,我的异步函数只是没有异步执行。

0 投票
1 回答
327 浏览

asynchronous - 模块的异步问题 - Titanium

我正在尝试创建模块(地图视图、网络、地理位置等),但我面临异步问题。例如,我有 geolocation.js:

// 请求用户使用当前位置服务的权限

// 获取当前位置(触发一次)

Titanium.Geolocation.getCurrentPosition(function(e){

}

我想从我的 app.js 调用: var location = require('/geolocation'); var latlon= location.getLocation(); 但是 getCurrent 位置是异步的,所以当我使用“return lat+lon”时,我得到空值。我尝试了回调,但他们无法返回 getLocation 的值。有什么通用的方法来管理这个异步函数吗?

0 投票
1 回答
2550 浏览

android - Titanium:在 commonjs 模块中需要一个模块

我发现我们可以创建 CommonJS 模块而不是原生或 Web 模块(查看您的 Titanium 文件夹并搜索 ti.cloud 模块)。但是我找不到可以解释它的文档...

因此,我尝试在 Titanium 文件夹“commonjs”中添加自己的 CommonJS 模块,并使用“require”将其导入我的应用程序。它像魅力一样运行。

现在,我想在我的 CommonJS 模块中添加一些其他文件,并使模块在模块内相互引用。

例如在我的应用程序中,我有:

  • main.js
  • 用户界面
    • CommonView.js

在这个结构中,main.js 是我的主模块,并且有一个方法 createCommonView() 尝试要求模块 CommonView (require('./ui/CommonView')) 但编译器抱怨找不到该模块。

如何创建具有多个相互引用的模块的 CommonJS 模块?

准确地说,我不想在我的项目中复制这些模块。我想将它们保存在 Titanium 文件夹中,以便所有项目都可以使用它。

0 投票
1 回答
4963 浏览

javascript - Closure Compiler 可以构建 CommonJS 模块吗

我想使用Google Closure Compiler来构建一组CommonJS模块。这可以开箱即用吗?或者,是否可以对 CommonJS 模块进行一些简单的转换,以允许 Closure Compiler 使用它们?

0 投票
2 回答
1227 浏览

javascript - Backbone.js 应用程序使用 CommonJS 结构与 node.js 和客户端一起工作

我正在研究一种使用允许需要 Javascript 模块的 CommonJS 结构由 BackboneJS 应用程序编写的方法。然后,此应用程序可以使用节点在客户端或服务器端工作。

我已经研究了requirejs和其他类似的选项,但是您必须以特定的方式编写应用程序,在我看来这看起来真的很糟糕。

我还查看了browserifywebmake,它们获取您的代码和所需的任何模块,并将它们组合成一个带有缺失 (require) 方法的单个 js 文件。都是一个聪明的主意,但是让客户端的代码有点混乱。

有没有这样的东西可以通过以commonJS格式编写的代码,编译与浏览器兼容的所有必需模块并吐出一个可以在浏览器中使用而不必担心的Javascript文件(或多个)关于缺少 require 方法?更好的是为骨干应用量身定制的解决方案。

0 投票
1 回答
1255 浏览

javascript - 定义 CommonJS 模块时的 fn.call(this) 与 fn()

使用以下习惯用法定义 CommonJS 模块是很常见的:

例如,Underscore.js就是这样做的。

我只花了半个小时和一位同事讨论他们为什么用call(this). 这将导致this闭包内部的值从调用者继承,而不是设置为全局对象。但是,当我在 Node.js 中对此进行测试时,this模块内部的值始终是全局对象,即使我像这样加载并运行它:

我真的希望bar在控制台中看到该对象,但实际上我看到的是全局对象。然后我想到这可能是因为像 Underscore.js 这样的模块也用于 Web 上下文。但在那种情况下,它会被加载一个 <script> 标签,所以无论如何它this总是等于全局对象。

是什么赋予了?我确信使用这种结构是有原因的,但在这种特殊情况下,无论模块是在 Node.js 中还是在网页中使用,我都看不出实际的区别。

更新:为了澄清,我可以想到一些可能会产生影响的情况。例如,如果我说:

(感谢@Pointy 纠正我原来的例子。)

我希望模块中的闭包在require()被调用时被评估,这意味着它this内部的值将绑定到全局对象,即使foo()随后作为“bar”的成员调用,也会将其写入控制台“ 目的。但是,即使在此示例中,我也会在控制台中看到“栏”对象。我想这this并没有像我预期的那样被关闭?

简而言之,我正在寻找一个示例,其中像 Underscore.js 这样的模块将具有不同的行为,因为它被包装在一个调用的闭包中,fn.call(this)而不是只是fn()在 Node.js 或网页中。