da10d42183
Advantages of a top-level `package.json`: * It prevents npm from printing benign warnings about missing `package.json` whenever a plugin is installed. * Semantically, it is "the right thing to do" if plugins are to be installed in the top-level directory. This avoids violating assumptions various tools make about `package.json`, which makes it more likely that we can easily switch to a new version of npm or to an npm alternative. Disadvantages of a top-level `package.json`: * Including a dependency of `ep_etherpad-lite@file:src` in the top-level `package.json`, which is required to keep npm from deleting the `node_modules/ep_etherpad-lite` symlink each time a package is installed, drastically slows down plugin installation because npm recursively walks the ep_etherpad-lite dependencies. * npm has a horrible dependency hoisting behavior: It moves dependencies from `src/node_modules/` to the top-level `node_modules/` directory when possible. This causes numerous mysterious problems, such as silent failures in `npm outdated` and `npm update`, and it breaks plugins that do `require('ep_etherpad-lite/node_modules/foo')`. Right now, with npm v6.x, eliminating the disadvantages is far more valuable than keeping the advantages. (This might change with npm v7.x.) For a long time there was no top-level `package.json` and it worked fairly well, although users were often confused by npm's benign warnings. The top-level `package.json` was added because we needed a place to put ESLint config for the stuff in `bin/` and `tests/`, and we wanted the advantages listed above. Unfortunately we were unaware of the disadvantages at the time. The `bin/` and `tests/` directories were moved under `src/` so we no longer need the top-level `package.json` for ESLint. An alternative to a top-level `package.json`: Create `plugins/package.json` and install all plugins in `plugins/`. If `plugins/package.json` has a dependency of `ep_etherpad-lite@file:../src` then plugin installation will still be slow (npm will still recursively walk the dependencies in `src/package.json`) but it should avoid npm's nasty dependency hoisting behavior. To avoid slow plugin installation we could create a lightweight `etherpad-pluginlib` package that Etherpad plugins would use to indirectly access Etherpad's internals. As an added bonus, this intermediate package could become an adaptor that provides a stable interface to plugins even when Etherpad core rapidly evolves.
23 lines
329 B
Text
23 lines
329 B
Text
node_modules
|
|
/settings.json
|
|
!settings.json.template
|
|
APIKEY.txt
|
|
SESSIONKEY.txt
|
|
etherpad-lite-win.zip
|
|
var/dirty.db
|
|
*~
|
|
*.patch
|
|
npm-debug.log
|
|
*.DS_Store
|
|
.ep_initialized
|
|
*.crt
|
|
*.key
|
|
credentials.json
|
|
out/
|
|
.nyc_output
|
|
.idea
|
|
/package-lock.json
|
|
/src/bin/abiword.exe
|
|
/src/bin/convertSettings.json
|
|
/src/bin/etherpad-1.deb
|
|
/src/bin/node.exe
|