Нет node_modules из развертывания netlify - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть непрерывная настройка развертывания с Netlify и git-репо, но до сих пор, независимо от того, что я делаю, Netlify ничего не делает.Там нет папки node_modules, когда я загружаю ZIP-файл развертывания, мой сайт не может получить доступ к node_modules, просто его там нет.Я начал со случайного пакета npm (lodash), чтобы попытаться установить его, но пока ничего не получил.

Netlify говорит, что он автоматически запускается npm install.Я пробовал не иметь команд для сборки, и я пытался добавить npm install в качестве команды для сборки, но без результатов.

package.json:

{
  "name": "netlify-test",
  "version": "1.0.0",
  "description": "stuff",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/electrovir/netlify-test.git"
  },
  "author": "electrovir",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/electrovir/netlify-test/issues"
  },
  "homepage": "https://github.com/electrovir/netlify-test#readme",
  "dependencies": {
    "lodash": "^4.17.11"
  }
}

HTML:

<!doctype html>
<html>

<head>
    <title>
        hi
    </title>
    <script src="node_modules/lodash/_apply.js"></script>
</head>

<body>
    Why can't this find node_modules??
</body>

</html>

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Потребовалось некоторое время, чтобы понять это, но я обнаружил, что Netlify делает npm install в корневой каталог репо или Базовый каталог , когда у вас есть package.json.Это можно увидеть, изменив команду Build на что-то вроде ls и прочитав вывод консоли развертывания (в списке будет папка node_modules).

Однако в какой-то моментпосле выполнения команды Build и перед развертыванием этот node_modules удаляется.Следовательно, если вы используете нечто подобное следующему в качестве команды построения , node_modules можно скопировать в ваш каталог публикации :

rm -rf dist && mkdir dist && rsync -rv * dist --exclude ./dist

Это копирует Базовый каталог содержимого в dist, который я установил в качестве Публикация каталога , игнорируя сам ./dist (его нельзя скопировать в себя).Было бы еще лучше, если бы он был добавлен в виде сценария npm в package.json с npm run <script name> для вашей команды сборки .

Обратите внимание, что Base directory , Команда построения и Каталог публикации находятся в Развертывание> Настройки развертывания или Настройки> Сборка и развертывание в Netlify.

Спасибо lastmjs за помощь в выяснении этого.

0 голосов
/ 05 февраля 2019

Было бы странно, если бы node_modules БЫЛ там.Непрерывное развертывание Netlify запускает npm install для вас, если и только если в корневом каталоге вашего хранилища есть файл package.json (или вместо этого в каталоге base, если вы установите его в netlify.toml .Однако он также использует пользовательский каталог npm, который находится за пределами каталога развертывания (посмотрите, как он настроен, здесь: https://github.com/netlify/build-image/blob/master/run-build-functions.sh#L34),, поскольку развертывание node_modules не требуется для статического сайта во время просмотра - только во время сборки.

Предполагаемый путь для развертывания Netlify:

  1. ваша конфигурация менеджера зависимостей проверена в вашем git-репозитории в корнеrepo (если каталог base не установлен в пользовательском интерфейсе или в файле toml) или каталог base, если он установлен. Это может быть любой / все из Gemfile.lock, package.json, yarn.lock или requirements.txt как описано в этой статье о настройках сборки в Netlify
  2. вы не сохраняете node_modules в репозитории. Многие из них будут специфичны для архитектуры среды сборки- и тыЛокальный компьютер почти наверняка отличается от Netlify.Вы захотите, чтобы они генерировались во время сборки.
  3. ваша сборка предназначена для ИСПОЛЬЗОВАНИЯ этих модулей во время сборки.Например, вы используете dotenv для чтения файла .env во время сборки или gulp-cli для обработки Gulpfile.js
  4. завершения сборки,и вы использовали все модули во время сборки для генерации автономных html / js / css / images, так что вы с ними покончили - ваш статический html и другие ресурсы генерируются в вашем общедоступном каталоге, где процесс сборки намеренно имеет не ставьте свои узлы модулей, и поэтому они не развернутыВаш статический веб-сайт не должен нуждаться в модулях во время выполнения, поэтому развертывание (тысяч!) Файлов там неэффективно или не нужно.

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

...