Плагины Grunt не установлены в текущем местоположении

Я работаю с 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
[email protected] ../../node_modules/grunt-contrib-mincss
├── [email protected]
├── [email protected] ([email protected], [email protected])
└── [email protected] ([email protected])

Почему плагин установлен снаружи? Или есть способ определить фактическое место, где он установлен?


person F Lekschas    schedule 25.09.2012    source источник
comment
Где ваш файл grunt.js? Это в том же каталоге, в котором вы установили плагин?   -  person Alexey Ivanov    schedule 25.09.2012
comment
Да, мой файл grunt.js находится в корне проекта. (Иначе хрюканье вообще ничего бы не сделало, не так ли?)   -  person F Lekschas    schedule 26.09.2012
comment
Не обязательно рутировать папку. Вам просто нужно запустить grunt из папки, там есть места отправки пути к нему в параметрах. Я постараюсь описать полный способ установки этого плагина, который работал у меня в ответ.   -  person Alexey Ivanov    schedule 26.09.2012
comment
Хорошо. У меня осталась только одна идея. Попробуйте запустить npm config edit в консоли и посмотрите значение флага global — оно должно быть установлено в false. Если он установлен в true, то проблема, вероятно, в нем.   -  person Alexey Ivanov    schedule 27.09.2012
comment
Похоже, это ошибка конфигурации, так как я получаю сообщение об ошибке «файл не найден», когда пытаюсь открыть конфигурацию npms. Спасибо, что указали мне направление!   -  person F Lekschas    schedule 27.09.2012
comment
Прохладно. Кстати, вы можете получить значение global из консоли с помощью команды npm get global.   -  person Alexey Ivanov    schedule 27.09.2012


Ответы (5)


Этот способ установки работал для меня:

  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 должны быть в одной папке).

Пожалуйста, проверь это.

person Alexey Ivanov    schedule 26.09.2012
comment
Я делал точно такие же вещи. И я понял, что Grunt не создал никакой папки node_modules. Поэтому я попытался установить их глобально с помощью -g и жестко скопировал их в корневую папку моего проекта, но все же, когда я запускаю grunt, он дает мне те же ошибки. И я трижды проверил установку, она не выдает мне никаких ошибок или чего-то еще. Я что-то запутался :D - person F Lekschas; 26.09.2012
comment
Какую версию node.js и grunt вы используете? (Попробуйте обновить их и установить снова, если они не самые последние) Попробуйте клонировать git-репозиторий плагина в папку node_modules проекта, будет ли это работать таким образом? Также вы устанавливаете локальный плагин с командой sudo или без нее? Какие права заданы на копируемую папку? - person Alexey Ivanov; 26.09.2012
comment
Я обновил узел с 0.8.9 до 0.8.10. Я также обновил свой вопрос выводом тестового прогона. - person F Lekschas; 26.09.2012

У меня была аналогичная проблема в Ubuntu 12.04 для модуля grunt-jasmine-task (то же сообщение об ошибке, что и выше). Это решило проблему для меня:

  1. Вручную создайте папку node_modules в корне проекта.
  2. Запустите npm install grunt-jasmine-task еще раз.
person Ludder    schedule 19.12.2012

Я видел случаи, когда отсутствие файла package.json приводило к глобальной установке модулей. Я не уверен, какая версия работала в то время, так как это была не моя машина.

В следующий раз попробуйте запустить npm init перед установкой модулей. После этого установите с помощью npm install grunt-contrib-css --save, чтобы он был добавлен в ваш файл package.json. Вы также можете использовать --save-dev, чтобы добавить его в свои devDependencies.

person Brian Lewis    schedule 21.06.2013

В моем случае я забыл добавить:

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');

};
person Sam3k    schedule 05.01.2013

Если вы заглянете в папку grunt-contrib-mincss, там есть файл readme, имя изменено с grunt-contrib-mincss на grunt-contrib-cssmin.

в любом случае, это не ваша (и моя) вина. XD

person jiananshi    schedule 27.07.2014