Grunt在本地安装node_modules

时间:2014-02-18 23:03:27

标签: node.js gruntjs

我有一个Gruntfile来安装一些npm并创建其他功能。

问题在于:npm的下载工作正常,但在

中全局下载node_modules
/User/my_user/node_modules

我想在我的项目中本地动态下载gruntfile nom而不指定路径。

这是我的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

返回错误,它找不到模块,因为它不是本地的,而是全局的。

我该如何解决?

由于

1 个答案:

答案 0 :(得分:2)

这是一种非常粗暴的工作方式。理想情况下,所有这些都应该进入根文件夹中的package.json。在进行必要的更改(如果有)之后将其放入package.json并执行npm install它将在本地安装软件包,preinstall hook将安装全局软件包,以便执行安装。

{
    "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.js shell目标

中包含的其他任务