3

Я являюсь разработчиком внешнего интерфейса и храню свои внешние проекты в OneDrive. Из-за того, как Node.js организует зависимости, у каждого проекта есть каталог node_modules с десятками мегабайт крошечных файлов, которые всегда будут синхронизироваться.

Что я могу сделать, чтобы избежать синхронизации node_modules при сохранении проектов в OneDrive?

3 ответа3

5

Фон

OneDrive не позволяет исключать каталоги по имени, и это скоро не изменится:

[Представительский ответ OneDrive на запрос UserVoice:] Не сейчас

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

Решение

Тем не менее, вы можете решить эту проблему путем настройки вещей на стороне Node.js. Сделайте каталог node_modules символической ссылкой на файл в другом месте:

# Open any place outside OneDrive
cd D:\node_dependencies
# Make a symlink target. After linking, node_modules for your project 
# will be installed here
mkdir node_modules_for_my_project

# Open the project directory
cd <the project directory>
# Make a *file* link from node_modules to the newly created directory.
# You will need to delete existing node_modules directory if it exists
cmd /C "mklink node_modules D:\node_dependencies\node_modules_for_my_project"

Важным моментом здесь является то, что вы создаете символьную ссылку на файл , а не директорию . OneDrive не распознает и не синхронизирует эту символическую ссылку, тогда как Node.js будет работать с ней так, как задумано:

Скриншот, показывающий, что npm install и Node.js требуют работы как положено

Протестировано с OneDrive v17.3.7101.1018 и файлами OneDrive по требованию.

Недостатки

Это не универсальное решение. Недостатком этого является то, что Explorer, Powershell и другие инструменты не распознают node_modules как каталог:

Снимок экрана, показывающий, что Explorer отображает node_modules как нераспознанный файл со значком ярлыка

Тем не менее, редакторы кода на основе Node.js будут читать это очень хорошо:

Снимок экрана кода Visual Studio с расширенным каталогом node_modules

2

Я знаю, что это старый вопрос, но я столкнулся с той же проблемой. Решение, с которым я столкнулся, состояло в том, чтобы сначала создать пустую папку node_modules а затем синхронизировать ее с облаком.

После синхронизации пустой папки я вошел в

Настройки OneDrive → Выбрать папки

и отменил выбор папки node_modules .

Затем при запуске npm install в корневой папке проекта OneDrive обнаружит конфликт с содержимым папки в облаке. Это не будет синхронизироваться.

Изображение ошибки синхронизации

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

1

Для пользователей Typescript добавьте node_modules в свой путь, чтобы избежать проблем с разрешением модулей.

В tsconfig.json добавьте:

"paths": {
  [... some paths ...],
  "*": [
    "node_modules/*"
  ]
}

Изменить: все еще есть некоторые проблемы. Я могу построить проект, но ts-node и nodemon fire Cannot find module ошибки модуля . Ну, это все еще проблема тогда :(

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .