tl; dr:
Можно ли подтвердить / гарантировать (используя библиотеку или что-то еще), что файл .js будет иметь доступ только к определенному подмножеству модулей?
Например: если файл .js находится в папке /controllers
, ему разрешено иметь доступ только к определенным глобальным модулям (например, express
) и импортировать из определенных папок (например: ../repositories
).,Все, что находится вне этого списка, не разрешено
Обоснование:
В большом проекте со многими разработчиками почти неизбежно, что кто-то вторгается в слои.Например: в рамках действия контроллера MVC получите доступ к базе данных через драйвер db / SQL без прохождения через репозиторий или более упрощенную абстракцию .
const express = require('express');
const router = express.Router();
const pg = require('pg');
const path = require('path');
const connectionString = process.env.DATABASE_URL;
router.get('/api/v1/todos', (req, res, next) => {
const results = [];
pg.connect(connectionString, (err, client, done) => {
const query = client.query('SELECT * FROM items ORDER BY id ASC;');
query.on('row', (row) => { results.push(row); });
query.on('end', () => {
done();
return res.json(results);
});
});
});
Это очень простой пример, просто чтобы проиллюстрировать проблему.На самом деле, в многослойной / многомодульной системе все на самом деле немного сложнее, и довольно часто можно увидеть недопустимые графы зависимостей, появляющиеся по мере роста проекта.
Я знаю, что часть проблемы решается с помощьюкомандная тренировка, но мне интересно, есть ли способ систематически усиливать это.Возможно, что-то похожее на no-limited-import или no-limited-modules в ESLint.
edit: