2014-02-18 67 views
1

我有一个Gruntfile来安装一些npm并使其他功能。Grunt在本地安装node_modules

的问题是:NPM的下载工作正常,但在下载

/User/my_user/node_modules 

全球node_modules我愿意在本地的gruntfile下载NOM我的项目中没有动态指定路径。

这是我的呼噜声文件的一部分:

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 

返回我的错误,它没有找到模块,因为不在本地,但在全球范围内..

我该如何解决?

谢谢

+0

确保你的shell命令在您的CWD拼命地跑。 –

+0

我不明白你为什么把这些东西放在你的Gruntfile中。看起来他们应该在'package.json'中,然后用'npm install'一起安装。 – jakerella

回答

2

这是一个非常粗糙的方式做这项工作。理想情况下,所有这些都应该在您的根文件夹中进入package.json。在做出必要的更改(如果有的话)后将其放入package.json并执行npm install它将在本地安装软件包并且preinstall挂钩将安装执行安装的全局软件包。

{ 
    "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安装。

关注该LINK更多信息

其他任务,你可以在您的Gruntfile.jsshell目标

+0

'npm global'安装目前不可能从package.json中使用'preinstall'钩子是一种解决方法。 – tekkavi

+0

感谢您的帮助我将遵循此解决方案, –