Package files are files that are part of a module, but are not immediately executed when the module executes. Instead, they are lazy-excecuted when require() is called on them. Package files can be scripts (JS) or data (JSON), and can be real files on the file system, or virtual files generated by a callback. Using virtual data files, server-side data and config variables can be bundled with a module. Support for file-based require() allows us to import npm modules into ResourceLoader more easily. The require function passed to each script execution context, which was previously a reference to the global mw.loader.require() function, is changed to one that is scoped to the module and the file being executed. This is needed to support relative paths: require( '../foo.js' ) can mean a different file depending on the path of the calling file. The results of require()ing each file (i.e. the value of module.exports after executing it) are stored, and calling require() on the same file a second time won't execute it again, but will return the stored value. Miscellaneous changes: - Add XmlJsCode::encodeObject(), which combines an associative array of XmlJsCode objects into one larger XmlJsCode object. This is needed for encoding the packageFiles parameter in mw.loader.implement() calls. Bug: T133462 Change-Id: I78cc86e626de0720397718cd2bed8ed279579112
4 lines
33 B
JSON
4 lines
33 B
JSON
{
|
|
"foo": "bar",
|
|
"answer": 42
|
|
}
|