Grunt在本地安装node_modules

我有一个Gruntfile来安装一些npm并使其他function。

问题是:npm的下载工作正常,但在全局下载node_modules

/User/my_user/node_modules 

我想要gruntfiledynamic地下载我的项目在本地,而不指定path。

这是我的grunt文件的一部分:

 module.exports = function(grunt) { grunt.initConfig({ shell: { install: { options: { stdout: true, stderr: true }, command: [ "npm install grunt-contrib-sass", "npm install node-sass", "npm install grunt-contrib-less", "npm install less", "npm install grunt-contrib-watch", "npm install grunt-contrib-clean", "npm install grunt-contrib-copy", "npm install grunt-csso", "npm install grunt-deployments" ].join("&&") }, install_test: { options: { stdout: true, stderr: true }, command: [ "sudo npm install -g phantomjs", "npm install -g casperjs", "mkdir app/Test/Frontend", "sudo chmod -R 777 app/Test/Frontend" ].join("&&") }, } }); grunt.loadNpmTasks("grunt-contrib-less"); grunt.loadNpmTasks("grunt-contrib-watch"); grunt.loadNpmTasks("grunt-contrib-clean"); grunt.loadNpmTasks("grunt-contrib-copy"); grunt.loadNpmTasks("grunt-shell"); grunt.loadNpmTasks("grunt-csso"); grunt.loadNpmTasks("grunt-rsync"); grunt.registerTask("install", [ "shell:cake_tmp", "shell:install", "shell:install_test" ]); }; 

之后我这样做:

 sudo npm install grunt sudo npm install grunt-shell grunt install 

返回我错误,它没有find模块,因为不在本地,但全球..

我该如何解决?

谢谢

这是一个非常粗糙的工作方式。 理想情况下,所有这些都应该放到根文件夹中的package.json中。 把它放在你的package.json ,如果有必要的修改,执行npm install就会在本地安装这个包, preinstall钩子会安装执行install的全局包。

 { "name": "appname", "version": "0.0.0", "dependencies": {}, "devDependencies": { "grunt": "~0.4.1", "grunt-contrib-sass": "*", "node-sass": "*", "less": "*", "grunt-concurrent": "*", "grunt-contrib-clean": "*", "grunt-contrib-watch": "*", "grunt-contrib-less": "*", "grunt-contrib-copy": "*", "grunt-shell": "*", "grunt-csso": "*", "grunt-deployments": "*" }, "engines": { "node": ">=0.8.0" }, "scripts": { "test": "grunt test", "preinstall": "sudo npm install -g phantomjs && npm install -g casperjs" } } 

npm提供了预安装,安装,后安装等钩子,使用它们来执行-g安装。

按照此链接了解更多信息

你可以在你的Gruntfile.js包含其他任务作为shell目标