Объем экспорта в JS - PullRequest
       16

Объем экспорта в JS

0 голосов
/ 21 апреля 2020

Как только мы export что-то в JS. Например, в файле с именем foo.js есть строка, которая говорит: *

export default foo;

Мы можем импортировать его глобально из любого файла, который мы хотим. Но что, если есть необходимость избежать этого?

Вот формулировка проблемы:

  • Предположим, что X - это приложение, содержащее модули A и B .
  • Каждый модуль A и B содержит файл parser.js, в котором есть несколько экспортируемых функций с одинаковым именем.
  • Предположим, что A и B являются независимыми модулями. .
  • Если A и B являются независимыми модулями, в принципе, модули не должны иметь доступа к функциям / функциональным возможностям вне их области действия.
  • Из-за глобального экспорта доступны, при разработке, каждый имеет доступ к функциям в обоих parser.js файлах, и он / она может неосознанно использовать неправильный фрагмент кода.

Есть ли способ определить область, куда экспортируется модули могут использоваться только до определенного уровня.

Если нет, то есть ли какие-либо творческие способы go обойти проблему?

Ищете идеи для облегчения проблем разработки / опыта в масштаб:)

1 Ответ

1 голос
/ 21 апреля 2020

Вы можете просто использовать псевдонимы, чтобы избежать конфликта имен:

import {
  foo,
} from './some/path';

import {
  foo as bar,
} from './some/other/path';

Но да, большинство библиотек имеют одну точку входа (обычно индекс. js), которая экспортирует функциональность субмодулей. и все, что вам нужно сделать, это не экспортировать модуль, который вы хотите скрыть. Теперь, конечно, кто-то может импортировать субмодуль, который вы хотите скрыть напрямую, указав путь к нему в папке node_modules, но кто-то делает это: а) по глупости полагаться на неопубликованный c API и б) возможно, играть в достаточно высокий уровень, чтобы избежать такой ошибки.

Что касается кода приложения, потребляемого напрямую, просто поместите его в библиотеку, которую вы добавляете в пакет. json, например, из git url, или просто прокомментируйте код или изменить имя. Typescript также может помочь, если функции имеют разные сигнатуры типов, невозможно будет использовать одну там, где вы имели в виду другую.

Но, в конце концов, самый простой путь - это просто немного поверить в свою коллеги-разработчики: путь, путь, слишком много усилий уходит на то, чтобы люди не допустили ошибок, которые они вряд ли допустят.

РЕДАКТИРОВАТЬ на основе комментария

Импорт может быть распределен по пространству имен следующим образом:

import * as Whatever from 'some-module';

Whatever.someFn();
...