Node.js 如何让Grunt部署使用全局NPM模块而不是本地模块
首先,我对npm和grunt很陌生。我们有一个项目,我们正在使用Grunt编译和生成输出文件。我正在尝试将构建服务器设置为使用Grunt生成输出文件。我们将Windows与TFS源代码管理一起使用,由于,我们无法将grunt bower任务模块检查到源代码管理() 当我从我的项目目录运行npm install时,它工作正常,并将以下所需模块安装到我的项目目录中的node_modules文件夹中:Node.js 如何让Grunt部署使用全局NPM模块而不是本地模块,node.js,module,npm,gruntjs,Node.js,Module,Npm,Gruntjs,首先,我对npm和grunt很陌生。我们有一个项目,我们正在使用Grunt编译和生成输出文件。我正在尝试将构建服务器设置为使用Grunt生成输出文件。我们将Windows与TFS源代码管理一起使用,由于,我们无法将grunt bower任务模块检查到源代码管理() 当我从我的项目目录运行npm install时,它工作正常,并将以下所需模块安装到我的项目目录中的node_modules文件夹中: 咕噜声 咕噜-鲍尔任务 呼噜指南针 grunt contrib连接 grunt contrib j
- 咕噜声
- 咕噜-鲍尔任务
- 呼噜指南针
- grunt contrib连接
- grunt contrib jshint
- grunt contrib requirejs
- 呼噜手表
{
"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"
}
}
谢谢。您应该在模块上使用,而不是在
npm
中使用全局选项,以获得类似的结果
全局
npm
安装仅用于方便命令行实用程序,如jshint
,或grunt cli
,解决方法:在您自己的package.json中显式列出所有临时依赖项
例如,假设您依赖于模块a,而模块a依赖于模块b。在npm安装之后
您将拥有node_modules/module_a/node_modules/module_b/
,因为npm将在模块a本地安装模块b。但是,如果在package.json中添加模块_b作为直接依赖项(并且版本说明符完全匹配),那么npm将只在顶层安装模块_b一次
这是因为当需要模块时,它们会开始查找最近的节点_modules目录并向上遍历,直到找到所需的模块。因此,npm能够通过只在版本匹配的最低级别安装模块来节省磁盘空间
所以,修改示例。您依赖于模块_a@0.1.0这取决于模块_b@0.2.0. 如果您还依赖于模块_b@0.1.0,您将安装两次模块_b。(0.1.0版将安装在顶层,0.2.0版将安装在模块a下。)但是,如果您依赖于v0.2.0(使用package.json中与模块a使用的完全相同的版本字符串),那么npm将注意到它可以使用相同版本的模块b。因此,它将只在顶层安装模块_b,而不是在模块_a下安装
长话短说:将具有较深模块树的临时依赖项直接添加到您自己的package.json中,您将得到较浅的节点\u modules
树。我用于解决Windows上的此类问题。
即使它与Git一起工作,如果您在Team Explorer中使用Visual Studio中的Git集成,如果长文件路径位于node_modules文件夹中,即使您没有将该文件夹添加到源代码管理中,它也会崩溃
通常Grunt和Bower依赖结构会导致这种情况
npm dedupe
。这样做的目的是扫描已经安装的软件包,看看是否有重复的依赖项。如果在更高级别上发现,它将删除经过深入测试的我希望这能有所帮助。我知道这条线索很旧,但我最终用Mac电脑找到了自己的答案,但我认为PC也可以这么说/这么做 跟进bevacqua的回答:
您应该在模块上使用符号链接,而不是使用npm的全局选项,以获得类似的结果 全局npm安装只是为了方便命令行实用程序(如jshint或grunt cli)使用 我做了一些挖掘,也许可以
.global_grunt_modules
node_modules
grunt
grunt-contrib-watch
grunt-contrib-less