Как использовать локально установленный Gulp. js v4 с `yarn --no-bin-links`? - PullRequest
0 голосов
/ 17 апреля 2020

Я добавил Gulp. js v4 к зависимостям проекта и запустил yarn install --no-bin-links для локальной установки.

$ yarn install --no-bin-links
yarn install v1.17.3
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@1.2.12: The platform "linux" is incompatible with this module.
info "fsevents@1.2.12" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
[4/4] Building fresh packages...

success Saved lockfile.
Done in 32.48s.

(я использую параметр --no-bin-links, чтобы избежать эта ошибка: error An unexpected error occurred: "EPROTO: protocol error, symlink '../../../semver/bin/semver' -> '/path/to/project/public/components/accord/node_modules/.bin/semver'".)

package.json определяет правильные диапазоны версий:

{
  ...
  "dependencies": {
    "bootstrap": "^3.3.6",
    "gulp": "^4.0.2",
    "gulp-autoprefixer": "*",
    "gulp-cli": "^2.2.0",
    "gulp-filter": ">=6.0.0",
    "gulp-less": "*",
    "gulp-plumber": "*",
    "gulp-rename": "*",
    "gulp-watch": "*",
    "html5shiv": ">=3.7.3",
    "jquery": "^3.4.0",
    "jquery-ui": "^1.12.1",
    "jquery-ui-dist": "^1.12.1",
    "path": "*",
    "respond": ">=0.9.0"
  },
  ...
}

yarn.lock также относится к правильной версии:

...
gulp@^4.0.2:
  version "4.0.2"
...
gulp-cli@>=2.2.0, gulp-cli@^2.2.0:
  version "2.2.0"
...

А также yarn list обеспечивает ожидаемый вывод:

$ yarn list | grep "gulp"
├─ gulp-autoprefixer@7.0.1
├─ gulp-cli@2.2.0
│  ├─ gulplog@^1.0.0
├─ gulp-filter@6.0.0
├─ gulp-less@4.0.1
├─ gulp-plumber@1.2.1
├─ gulp-rename@2.0.0
├─ gulp-watch@5.0.1
├─ gulp@4.0.2
│  ├─ gulp-cli@^2.2.0
├─ gulplog@1.0.0

Но когда я сейчас выполняю gulp, используются старые версии (Gulp 3.9.1 и Gulp CLI 1.2.1:

$ ./public/components/gulp/bin/gulp.js -v
[15:42:30] CLI version 1.2.1
[15:42:30] Local version 3.9.1

Что здесь не так и как правильно установить требуемую версию Gulp с помощью Yarn и , чтобы эта версия использовалась?

1 Ответ

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

Если ваш PATH не был настроен, выполнение gulp в CLI всегда будет ссылаться на глобальную версию, если она установлена.

Вам нужно ссылаться на ту, которая установлена ​​локально. Если вы устанавливаете нормально (без --no-bin-links), вы можете использовать любой из этих методов.

  1. Создайте скрипт пряжи , такой как "foo": "gulp --version". Это будет ссылаться на локальную версию gulp.

  2. Использовать yarn gulp

  3. Использовать $(yarn bin)/gulp

Используя --no-bin-links, вы можете напрямую ссылаться на двоичный файл, это просто сложнее, потому что он не был связан со своим стандартным местоположением.

Во-первых, вам нужно найти метаданные о двоичные файлы, связанные с gulp (на самом деле, gulp-cli), что вы можете сделать с информация о пряже : yarn info gulp-cli bin. Затем вам нужно выполнить этот двоичный файл.

node ./node_modules/gulp-cli/bin/gulp.js --version

Проблема в том, что это небезопасно, если внутренняя организация gulp меняется, поэтому лучше связать бинарный файл.

You может сделать это несколько безопаснее, генерируя команду с подпроцессами, но вы все еще зависите от структуры node_modules.

...