首先,我对 npm 和 grunt 很陌生。我们有一个项目,我们正在使用 Grunt 为其编译和生成输出文件。我正在尝试设置我们的构建服务器以使用 Grunt 生成输出文件。我们正在使用带有 TFS 源代码控制的 Windows,并且由于它的 260 个字符路径限制,我们无法将 grunt-bower-task 模块检查到源代码控制中(因为它单独在其安装路径中使用 230 个字符)。
当我从我的项目目录运行npm install时,它工作正常并将以下所需模块安装到我的项目目录中的 node_modules 文件夹中:
- 咕哝
- 咕噜咕噜任务
- grunt-contrib-compass
- grunt-contrib-connect
- grunt-contrib-jshint
- grunt-contrib-requirejs
- grunt-contrib-watch
然后当我从我的项目目录运行grunt deploy时,一切都按预期工作。
虽然我可以简单地将运行npm install作为构建过程的一部分,但我不想这样做,因为下载所有文件需要几分钟,而且我不希望我们的构建依赖于可用的外部 Web 服务。
我已经看到您可以在本地或全局安装模块,所以我希望能够在构建服务器上全局安装模块,这样它们就不需要直接位于项目目录内的 node_modules 文件夹中运行grunt deploy。我已经为上面列出的每个模块以及npm install -g grunt-cli运行了npm install -g和npm install -g [module]。
如果我执行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"
}
}
谢谢。