【发布时间】:2013-11-16 16:36:20
【问题描述】:
首先,我对 npm 和 grunt 很陌生。我们有一个项目,我们正在使用 Grunt 为其编译和生成输出文件。我正在尝试设置我们的构建服务器以使用 Grunt 生成输出文件。我们正在使用带有 TFS 源代码控制的 Windows,由于 it's 260 character path limit,我们无法将 grunt-bower-task 模块签入源代码控制 (as it alone uses 230 characters in its installed path)。
当我从我的项目目录运行 npm install 时,它工作正常,并将以下所需模块安装到我的项目目录中的 node_modules 文件夹中:
- 咕噜声
- 咕噜咕噜任务
- grunt-contrib-compass
- grunt-contrib-connect
- grunt-contrib-jshint
- grunt-contrib-requirejs
- grunt-contrib-watch
然后当我从我的项目目录运行 grunt deploy 时,一切都按预期工作。
虽然我可以简单地将运行 npm install 作为构建过程的一部分,但我不希望这样做,因为下载所有文件需要几分钟,而且我不想要我们的构建依赖于可用的外部网络服务。
我已经看到you can install modules either locally or globally,所以我希望能够在构建服务器上全局安装模块,这样它们就不需要在运行之前直接位于项目目录内的 node_modules 文件夹中 咕噜部署。我已经为上面列出的每个模块运行了 npm install -g,以及 npm install -g [module],以及 npm install - g grunt-cli.
如果我执行 npm prefix -g,它会告诉我全局模块目录是 C:\Users[My User]\AppData\Roaming\npm,当我查看了该目录的 node_modules 文件夹,我确实看到了所有模块。但是,当我运行 grunt deploy 时,它会抱怨:
致命错误:无法找到本地咕噜声
如果我只包含 *node_modules\grunt* 目录,那么我仍然会收到以下错误:
找不到本地 Npm 模块“grunt-contrib-watch”。安装了吗?
找不到本地 Npm 模块“grunt-contrib-jshint”。安装了吗?
...
我也尝试过使用 *grunt deploy --base "C:\Users[My User]\AppData\Roaming\npm",但它抱怨它找不到其他文件,例如 .jshintrc。
那么有没有一种方法可以让我运行 grunt deploy 并让它检查模块的 npm 全局前缀路径,而不是查看项目目录?
一个棘手的解决方法是在构建过程中手动将模块复制到本地项目目录,但如果可能的话,我想避免这种情况。
作为参考,这是我的 package.json 文件的样子:
{
"name": "MyProject",
"version": "0.0.1",
"scripts": {
"preinstall": "npm i -g grunt-cli bower"
},
"devDependencies": {
"grunt": "~0.4.1",
"grunt-contrib-compass": "~0.2.0",
"grunt-contrib-watch": "~0.4.4",
"grunt-contrib-jshint": "~0.6.0",
"grunt-contrib-requirejs": "~0.4.1",
"grunt-contrib-connect": "~0.3.0",
"grunt-bower-task": "~0.2.3"
}
}
谢谢。
【问题讨论】:
-
感谢您如此雄辩地详细说明我遇到的问题。这让我发疯了。
标签: node.js module npm gruntjs