iOS CommonJS模块返回“未定义不是构造函数”错误
我正在尝试使用预编译的CommonJS模块创建一个iOS Titanium模块。 正如自述文件所说:
资产目录中的所有JavaScript文件都是IGNORED,除非您在此目录中创建名为“com.moduletest.js”的文件,在这种情况下,它将被本机代码包装,编译并用作您的模块。 这允许您运行预编译的纯JavaScript模块。
我已经创建了这样的文件:
function ModuleTest(url){
if(url){
return url;
}
}
exports.ModuleTest = ModuleTest;
我正在使用5.1.2.GA SDK(也尝试使用5.3.0.GA),我可以使用python build.py
或titanium build --platform iOS --build-only
成功构建模块。 然后,在我的测试应用程序中执行:
var test = require('com.moduletest');
var url = new test.ModuleTest('http://url');
给我这个错误:
未定义不是一个构造函数。 我一直在尝试很多的选择,但似乎没有任何工作,我没有找到任何关于iOS预编译JS模块的文档的帮助。 实际上,同样的过程对Android非常有用! 你有一些想法,为什么?
我的环境:
XCode 7.3.1
操作系统名称 - Mac OS X版本 - 10.11.5架构 - 64位#CPU - 8内存 - 16.0GB
Node.js Node.js版本 - 0.12.7 npm版本 - 2.11.3
Appcelerator CLI安装程序 - 4.2.6核心软件包 - 5.3.0
Titanium CLI CLI版本 - 5.0.9 node-appc版本 - 0.2.31
也许这与我的Node版本或appc CLI有关,不知道= /
谢谢!
有2个解决方案。
1)不要把它放在assets中,而应该放在/app/lib
文件夹中,就像其他人提到的一样。
2)将它包装为一个真正的commonjs模块,就像我写的模块一样
在这两种情况下,您都可以使用require('modulename')
。 在情况2中,您需要将其添加到tiapp.xml
文件中,就像其他任何模块一样。
你的文件的路径将出现在/modules/commonjs/modulename/version/module.js
或类似的地方。 我的链接模块将向您显示所需的要求和路径。
我使用了一个稍微不同的模式,效果很好:
首先从我的“模块”中选择一小段代码:
Stopwatch = function(listener) {
this.totalElapsed = 0; // * elapsed number of ms in total
this.listener = (listener != undefined ? listener : null); // * function to receive onTick events
};
Stopwatch.prototype.getElapsed = function() {
return this.totalElapsed;
};
module.exports = Stopwatch;
然后这就是我使用它的方式:
var StopWatch = require('utils/StopWatch');
var stopWatch = new StopWatch(listenerFunction);
console.log('elapsed: ' + stopWatch.getElapsed());
链接地址: http://www.djcxy.com/p/96613.html
上一篇: iOS CommonJS module returns "undefined is not a constructor" error