4

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

cd <PROJECT_ROOT>
npm install grunt-contrib-css

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

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

但是当我尝试运行 grunt 我只是得到

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)

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

4

5 回答 5

4

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

  1. node_modules在项目的根目录中手动创建文件夹。
  2. 再跑npm install grunt-jasmine-task
于 2012-12-19T21:31:57.960 回答
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在终端中运行。

脚本有效。

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

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

请检查一下。

于 2012-09-26T11:21:37.860 回答
1

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

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

于 2013-06-21T21:31:00.763 回答
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');

};
于 2013-01-05T12:12:48.953 回答
0

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

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

于 2014-07-27T14:30:53.867 回答