Titanium JIRA Archive
Titanium SDK/CLI (TIMOB)

[TIMOB-23383] Parity: Titanium CommonJS modules cannot require relative files

GitHub Issuen/a
TypeBug
PriorityCritical
StatusClosed
ResolutionFixed
Resolution Date2016-07-14T04:43:46.000+0000
Affected Version/sRelease 5.3.0
Fix Version/sRelease 6.0.0
ComponentsAndroid, iOS
Labelsn/a
ReporterChristopher Williams
AssigneeChristopher Williams
Created2016-05-16T17:21:03.000+0000
Updated2016-10-05T17:41:32.000+0000

Description

Titanium CommonJS modules have a hard limit to effectively all be contained in a single JS file whose base name matches the module.id. If you have a CommonJS module, not only does it have to have an entry file matching the module id(TIMOB-23382), but that file will fail to require any other files relative to it. For a simple example, I have a modules/commonjs/ti.commonjs.require/1.0.0 folder and inside is: - ti.commonjs.require.js - main.js I can do require('ti.commonjs.require'); from my Titanium app, and it'll load the modules/commonjs/ti.commonjs.require/1.0.0/ti.commonjs.require.js file (regardless of whether I have a package.json pointing to another file or an index.js file there). But if that file has a require('./main'); it'll throw a Runtime error that it's unable to load the main.js module.

Comments

  1. Christopher Williams 2016-05-16

    Just for testing sake, doing a require('main') or require('/main') as fails.
  2. Christopher Williams 2016-05-16

    On Android this appears to be the case because CommonJS modules are actually placed as a single file into the Resources folder of the generated app. One possible fix is to actually retain the module's full contents filtered down to just the *.js and *.json files, as a whole folder under the Resources folder?
  3. Eric Wieber 2016-10-05

    Verified fixed, using: MacOS 10.12 (16A323) Studio 4.7.1.201609100950 Ti SDK 6.0.0.v20161005072811 Appc NPM 4.2.7 Appc CLI 6.0.0-55 Alloy 1.9.2 Xcode 8.0 (8A218a) CommonJS modules can include relative files, without error (if specified as require('./main')). Tested by adding a log and require statement to a commonJS module then doing the same in the relative file. No errors were encountered and all logs were printed. Tested on both android and iOS simulators/emulators.

JSON Source