1
0
Fork 0
arangodb/Documentation/Books/Users/ModuleJavaScript/ModulesPath.mdpp

69 lines
2.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

!CHAPTER Modules Path versus Modules Collection
ArangoDB comes with predefined modules defined in the file-system under the path
specified by *startup.startup-directory*. In a standard installation this
point to the system share directory. Even if you are an administrator of
ArangoDB you might not have write permissions to this location. On the other
hand, in order to deploy some extension for ArangoDB, you might need to install
additional JavaScript modules. This would require you to become root and copy
the files into the share directory. In order to ease the deployment of
extensions, ArangoDB uses a second mechanism to look up JavaScript modules.
JavaScript modules can either be stored in the filesystem as regular file or in
the database collection `_modules`.
If you execute
require("com/example/extension")
then ArangoDB will try to locate the corresponding JavaScript as file as
follows
- There is a cache for the results of previous `require` calls. First of
all ArangoDB checks if `com/example/extension` is already in the modules
cache. If it is, the export object for this module is returned. No further
JavaScript is executed.
- ArangoDB will then check, if there is a file called
com/example/extension.js
in the system search path. If such a file exists, it is executed in a new
module context and the value of `exports` object is returned. This value is
also stored in the module cache.
- If no file can be found, ArangoDB will check if the collection `_modules`
contains a document of the form
{
path: "/com/example/extension",
content: "...."
}
Note that the leading `/´ is important - even if you call `require` without a
leading `/´. If such a document exists, then the value of the `content`
attribute must contain the JavaScript code of the module. This string is
executed in a new module context and the value of `exports` object is
returned. This value is also stored in the module cache.
!SUBSECTION Modules Cache
As `require` uses a module cache to store the exports objects of the required
modules, changing the design documents for the modules in the `_modules` collection
might have no effect at all.
You need to clear the cache, when manually changing documents in the `_modules`
collection.
arangosh> require("internal").flushServerModules()
This initiate a flush of the modules in the ArangoDB *server* process.
Please note, that the ArangoDB JavaScript shell uses the same mechanism as the
server to locate JavaScript modules. But the do not share the same module cache.
If you flush the server cache, this will not flush the shell cache - and vice
versa.
In order to flush the modules cache of the JavaScript shell, you should use
arangosh> require("internal").flushModuleCache()