如何使用本地安装的 Gulp.js v4 和 `yarn --no-bin-links`?

Posted

技术标签:

【中文标题】如何使用本地安装的 Gulp.js v4 和 `yarn --no-bin-links`?【英文标题】:How to use a locally installed Gulp.js v4 with `yarn --no-bin-links`? 【发布时间】:2020-07-31 01:11:41 【问题描述】:

我将 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

这里出了什么问题以及如何使用 Yarn 在本地正确安装所需的 Gulp 版本使这个版本可以使用?

【问题讨论】:

这是相关的 - ***.com/questions/9679932/… 【参考方案1】:

除非您的 PATH 已自定义,否则在 CLI 上运行 gulp 将始终引用全局版本(如果已安装)。

您需要引用本地安装的那个。如果您正常安装(没有--no-bin-links),您可以使用这些技术中的任何一种。

    创建一个yarn script,例如"foo": "gulp --version"。这将引用本地版本的 gulp。

    使用yarn gulp

    使用$(yarn bin)/gulp

使用--no-bin-links,您可以直接引用二进制文件,这更难,因为它没有链接到其标准位置。

首先,您需要找到与gulp(实际上是gulp-cli)相关联的二进制文件的元数据,您可以使用yarn info:yarn info gulp-cli bin 来完成。然后,您需要执行该二进制文件。

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

这样做的问题是,如果 gulp 的内部组织发生变化,则不安全,因此将二进制文件链接是一种更好的方法。

您可以通过使用子进程生成命令来使其更安全一些,但您仍然依赖于node_modules 的结构。

【讨论】:

以上是关于如何使用本地安装的 Gulp.js v4 和 `yarn --no-bin-links`?的主要内容,如果未能解决你的问题,请参考以下文章

gulp全局安装

01. 人生苦短 gulp.js的简介与安装

前端构建工具gulp.js的使用介绍及技巧

Gulp基础教程

前端Gulp系列教程:简介和安装

如何结合Gulp使用PostCss