Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 
 

91 рядки
4.3 KiB

'use strict';
const commonNodeOverrides = {
rules: {
'node/no-missing-require': ['error', {
allowModules: [
// Disable the node/no-missing-require rule for `require('ep_etherpad-lite/foo')`. It would
// be nice to warn plugin devs that their plugin is requiring a core Etherpad module that
// doesn't actually exist, but there is a significant cost to enabling this rule for
// ep_etherpad-lite: ep_etherpad-lite is a peer dependency for plugins, so a simple `npm i`
// in the plugin's clone will not install it. Instead, the developer working on the plugin
// ep_example has to do one of these two things:
//
// * Manually clone the etherpad-lite repo, then clone the ep_example repo to
// `/path/to/etherpad-lite/node_modules/ep_example`. Creating a symlink there that
// points to the clone's actual location will not work because npm (or maybe Node.js
// itself?) will resolve the symlink to its physical path before Node.js walks the
// parent directories in search of ep_etherpad-lite.
//
// The biggest flaw with this option: npm loves to quietly nuke anything in
// `node_modules` that isn't a dependency. There's no easy way to prevent npm from
// nuking the plugin's clone. "Installing" the plugin via
// npm install ep_example@file:/path/to/ep_example
// does not help because installation via `file:` works by creating a symlink in
// `node_modules`. (Another annoyance: The dev would have to remember to not commit the
// changes npm makes to `package.json` and `package-lock.json`.)
//
// * Manually clone the etherpad-lite repo, then create an `ep_etherpad-lite` symlink
// inside the plugin's `node_modules` directory that points to
// `/path/to/etherpad-lite/src`. This is a hack: It assumes Node.js searches the
// plugin's own `node_modules` directory even though ep_etherpad-lite is a peer
// dependency. Unfortunately, npm will quietly delete the `ep_etherpad-lite` symlink
// whenever it runs. To prevent npm from deleting the symlink, ep_etherpad-lite could be
// "installed" as a dev dependency via:
// npm install --save-dev ep_etherpad-lite@file:/path/to/etherpad-lite/src
// The dev would have to remember to not commit the changes npm makes to `package.json`
// and `package-lock.json`.
//
// This exemption is made here in this `plugin.js` file and not in `node.js` because
// Etherpad code in `etherpad-lite/bin` and `etherpad-lite/tests` already has
// ep_etherpad-lite available as a dependency (there is no developer burden there).
//
// This exemption does not affect node/no-extraneous-require, so a plugin is still required
// to add `ep_etherpad-lite` to its `peerDependencies` if it requires ep_etherpad-lite.
//
// All peer dependencies are similarly troublesome; this is not just an ep_etherpad-lite
// problem. They should all be listed here to avoid hassle. Unfortunately, this
// `allowModules` option does not take regular expressions, otherwise we could simply permit
// `ep_.*`. (Modules beginning with `ep_` are almost certainly going to be peer
// dependencies.)
'ep_etherpad-lite',
],
}],
},
};
module.exports = {
overrides: [
{
files: ['**/.eslintrc.js'],
extends: './node.js',
},
{
files: ['**/*'],
excludedFiles: ['**/.eslintrc.js', 'static/js/**/*', 'static/tests/frontend/**/*'],
extends: './node.js',
...commonNodeOverrides,
},
{
files: ['static/js/**/*'],
excludedFiles: ['**/.eslintrc.js'],
extends: './browser.js',
},
{
files: ['static/tests/**/*'],
excludedFiles: ['**/.eslintrc.js'],
extends: './tests.js',
},
{
files: ['static/tests/backend/**/*'],
excludedFiles: ['**/.eslintrc.js'],
extends: './tests/backend.js',
...commonNodeOverrides,
},
{
files: ['static/tests/frontend/**/*'],
excludedFiles: ['**/.eslintrc.js'],
extends: './tests/frontend.js',
},
],
};