如何使用全局安装的 gulp 模块?

How to use globally installed gulp modules?

我尝试 this tutorial 基本设置我的 gulp 项目并激活较少的处理和监视。有用。现在我想全局安装模块,以便从机器上的任何地方访问它们,而不是为每个项目安装它们:

npm install --global gulp-less
npm install --global gulp-watch
npm install --global gulp-autoprefixer
npm install --global gulp-plumber

现在我想 运行 gulp 在我的项目文件夹中,但是 gulp 找不到全局安装的模块:

$ cd /my/project
$ gulp
module.js:327
    throw err;
    ^

Error: Cannot find module 'gulp-less'
    at Function.Module._resolveFilename (module.js:325:15)
    at Function.Module._load (module.js:276:25)
    at Module.require (module.js:353:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (/root/temp/gulptest/gulpfile.js:9:12)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Module.require (module.js:353:17)
    at require (internal/module.js:12:17)

如何让它工作并使用全局 gulp 模块?

1。全局安装gulp:

如果您之前全局安装过gulp版本,请运行npm rm --global gulp 确保您的旧版本不会与 gulp-cli.

冲突

$ npm install --global gulp-cli

2。在你的项目中安装 gulp devDependencies:

$ npm install --save-dev gulp

阅读更多... https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md

解决方案是 npm-link。我必须 link 我所有的本地包裹到全球同行:

npm link gulp
npm link gulp-less
npm link gulp-watch
npm link gulp-autoprefixer
npm link gulp-plumber
npm link path

现在可以了。

有关此主题的一些 Whosebug 帖子:

  • "Skip local installation of Gulp"
  • "Why do we need to install gulp globally and locally?"

为了它的价值,我通过将这一行放在 gulpfile.js

的顶部解决了这个问题
module.paths = module.paths.concat(module.parent.paths);

我的父模块知道我的 npm 全局目录,但是在 运行 宁 gulpfile.js 时,似乎创建了一个子模块,但它不知道。相反,模块路径仅与项目所在的当前目录相关运行,然后每个先前的目录返回到我的驱动器的根目录。