Grunt插件未安装在当前位置

时间:2012-09-25 14:22:17

标签: javascript gruntjs

我正在使用Mac OS X 10.7.5,我正在使用Grunt来连接一些js文件并缩小它们。现在我想缩小我的CSS文件。由于grunt没有提供任何功能,我想为此安装一个grunt插件。 根据说明我必须进入我的项目根文件夹并使用npm安装插件。所以我做了以下事情:

cd <PROJECT_ROOT>
npm install grunt-contrib-css

该插件的说明如下:https://npmjs.org/package/grunt-contrib-mincss 我打开了我的grunt.js文件并添加了

grunt.loadNpmTasks('grunt-contrib-mincss');

但是当我试图运行咕噜声时,我得到了

Local Npm module "grunt-contrib-mincss" not found. Is it installed?
<WARN> Task "mincss" not found. Use --force to continue. </WARN>

安装工作没有任何问题,npm ls确实列出了模块。

任何想法我做错了什么?非常感谢!

已更新

当我进入像这样的项目时

cd ~/Sites/path/to/project

然后安装插件

sudo npm install grunt-contrib-mincss

模块实际安装在

~/node_modules/grunt-contrib-mincss

我可以将文件硬复制到我的项目根目录(可行),但有点奇怪不是吗?

更新2 我已经更新了节点并再次尝试了。下面是控制台输出。

me:~ Fritz$ node -v
v0.8.10
me:~ Fritz$ npm -v
1.1.62
me:~ Fritz$ mkdir ./Sites/npm-test
me:~ Fritz$ cd ./Sites/npm-test/
me:npm-test Fritz$ sudo npm install grunt-contrib-mincss
Password:
npm http GET https://registry.npmjs.org/grunt-contrib-mincss
npm http 304 https://registry.npmjs.org/grunt-contrib-mincss
npm http GET https://registry.npmjs.org/gzip-js
npm http GET https://registry.npmjs.org/clean-css
npm http GET https://registry.npmjs.org/grunt-contrib-lib
npm http 304 https://registry.npmjs.org/gzip-js
npm http 304 https://registry.npmjs.org/clean-css
npm http 304 https://registry.npmjs.org/grunt-contrib-lib
npm http GET https://registry.npmjs.org/crc32
npm http GET https://registry.npmjs.org/deflate-js
npm http GET https://registry.npmjs.org/optimist
npm http 304 https://registry.npmjs.org/deflate-js
npm http 304 https://registry.npmjs.org/crc32
npm http 304 https://registry.npmjs.org/optimist
npm http GET https://registry.npmjs.org/wordwrap
npm http 304 https://registry.npmjs.org/wordwrap
grunt-contrib-mincss@0.3.0 ../../node_modules/grunt-contrib-mincss
├── grunt-contrib-lib@0.3.0
├── gzip-js@0.3.1 (crc32@0.2.2, deflate-js@0.2.2)
└── clean-css@0.4.2 (optimist@0.3.4)

为什么插件安装在外面?或者有没有办法定义安装它的实际位置?

5 个答案:

答案 0 :(得分:4)

我在Ubuntu 12.04上遇到类似的模块grunt-jasmine-task问题(与上面相同的错误信息)。这解决了我的问题:

  1. 在项目的根目录中手动创建文件夹node_modules
  2. 再次运行npm install grunt-jasmine-task

答案 1 :(得分:3)

这种安装方式对我有用:

  1. cd <PROJECT_ROOT>
  2. 运行npm install grunt-contrib-mincss
  3. 使用以下测试内容在当前目录中创建测试文件:

    module.exports = function(grunt) {
    
        grunt.initConfig({
            mincss: {
                compress: {
                    files: {
                        "path/to/output.css": ["path/to/input_one.css", "path/to/input_two.css"]
                    }
                }
            }
        });
    
        grunt.loadNpmTasks('grunt-contrib-mincss');
    
        grunt.registerTask('default', 'mincss');
    
    };
    
  4. 我的目录结构此时看起来像这样(请检查一下,如果某些文件不存在或在其他文件夹中,那么它可能是它无效的原因):

    <PROJECT_ROOT> /
        node_modules /
            grunt-contrib-mincss/
        grunt.js
    
  5. 在终端中运行grunt

  6. 脚本有效。

    在您的情况下它不起作用的可能原因:

    1. 您全局安装了插件(使用-g参数)。
    2. 您已将其安装在某个子文件夹中(grunt.js和node_modules必须位于同一文件夹中)。
    3. 请检查。

答案 2 :(得分:1)

我见过没有package.json文件的情况导致模块全局安装。我不确定当时正在运行什么版本,因为它不是我的机器。

下次尝试在安装模块之前运行npm init。之后,使用npm install grunt-contrib-css --save进行安装,将其添加到package.json文件中。您还可以使用--save-dev将其添加到您的devDependencies。

答案 3 :(得分:0)

在我的情况下,我忘了添加:

grunt.loadNpmTasks('grunt-jsdoc-plugin');

到grunt.js,所以看起来应该是这样的:

module.exports = function(grunt) {

  // Project configuration.
  grunt.initConfig({

    jsdoc : {
      dist : {
        src: ['frontend/js/**/*.js'], 
        dest: 'docs/frontend'
      }
    }

  });

  grunt.loadNpmTasks('grunt-jsdoc-plugin');

};

答案 4 :(得分:0)

如果您查看grunt-contrib-mincss文件夹下有一个自述文件,他们将名称从grunt-contrib- mincss 更改为grunt-contrib- cssmin

无论如何,这不是你(和我的)的错。 XD