Меньше не скомпилируется как промежуточное ПО nodejs

Я установил меньше промежуточного программного обеспечения, чтобы меньше компилировать на лету, он прекрасно работал довольно давно, но я менял некоторые пакеты, делал npm update и так далее, но на самом деле ничего менее связанного...

И это перестало работать. Когда я запрашиваю, например, main.css (он должен скомпилировать main.less и использовать его как css), я получаю странную ошибку в консоли:

LESS Syntax error : Object function (deleteValue) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == deleteValue) {         
            this.splice(i, 1);
            i--;
        }
    }
    return this;
} has no method 'charAt'
  LESS File : /srv/sicy-node/public/css/main.less null:-1
TypeError: Object function (deleteValue) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == deleteValue) {         
            this.splice(i, 1);
            i--;
        }
    }
    return this;
} has no method 'charAt'
at Object.Parser.parser.parsers.parsers.ruleProperty (/srv/sicy-node/node_modules/less-middleware/node_modules/less/lib/less/parser.js:1938:37)
at Object.Parser.parser.parsers.parsers.rule (/srv/sicy-node/node_modules/less-middleware/node_modules/less/lib/less/parser.js:1479:48)
at Object.Parser.parser.parsers.parsers.primary (/srv/sicy-node/node_modules/less-middleware/node_modules/less/lib/less/parser.js:721:76)
at Object.Parser.parser.parsers.parsers.block (/srv/sicy-node/node_modules/less-middleware/node_modules/less/lib/less/parser.js:1427:51)
at Object.Parser.parser.parsers.parsers.ruleset (/srv/sicy-node/node_modules/less-middleware/node_modules/less/lib/less/parser.js:1461:48)
at Object.Parser.parser.parsers.parsers.primary (/srv/sicy-node/node_modules/less-middleware/node_modules/less/lib/less/parser.js:721:91)
at Object.Parser.parser.parsers.parsers.block (/srv/sicy-node/node_modules/less-middleware/node_modules/less/lib/less/parser.js:1427:51)
at Object.Parser.parser.parsers.parsers.directive (/srv/sicy-node/node_modules/less-middleware/node_modules/less/lib/less/parser.js:1715:34)
at Object.Parser.parser.parsers.parsers.primary (/srv/sicy-node/node_modules/less-middleware/node_modules/less/lib/less/parser.js:722:64)
at Object.Parser.parser.parse [as parse] (/srv/sicy-node/node_modules/less-middleware/node_modules/less/lib/less/parser.js:498:61)

Вот как устанавливается промежуточное ПО:

app.use(require('less-middleware')({ src: __dirname + '/public' }));

3 ответа

Решение

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

Извините за трату вашего времени.

Редактировать: проблема также может возникнуть, если вы используете @import url("thing.less"), попробуйте сбросить часть URL: @impurt "thing.less"

Возможно, я не решаю вашу конкретную проблему, но именно так я делаю меньше компиляции, используя grunt, на самом деле не только я, но и большинство людей, и я нахожу это очень удобным.

Grunt предоставляет отличный способ автоматизировать процесс преобразования LESS в CSS. Сначала вам нужно будет настроить несколько инструментов, но как только вы закончите с этим, вы можете легко использовать систему со всеми вашими проектами.

Grunt - это основанный на JavaScript модуль запуска задач, который можно настроить для отслеживания изменений, внесенных в файлы LESS. Когда содержимое изменяется, оно автоматически компилирует файлы в минимизированный CSS-файл.

Шаг 1. Установите Node.js. Получите установочный пакет с Nodejs.com и установите его. Двоичные файлы доступны для Mac OS X, Windows, Linux и SunOS. Вы также можете скомпилировать его из исходного кода.

Шаг 2: Установите Grunt Установите Grunt с помощью диспетчера пакетов Node:

sudo npm install -g grunt
sudo npm install -g grunt-cli

Шаг 3: Напишите свой конфигурационный файл Grunt

Создайте файл Gruntfile.js в каталоге вашего проекта. Затем скопируйте и вставьте содержимое ниже. Вам просто нужно изменить (закомментированные) строки, которые определяют, какие файлы вы хотите, чтобы Grunt наблюдал, и где разместить скомпилированный файл CSS.

    module.exports = function(grunt) {
          grunt.initConfig({
             less: {
              development: {
                    options: {
                         compress: true,
                         yuicompress: true,
                         optimization: 2
                      },
                     files: {
                         // target.css file: source.less file
                          "sites/all/themes/jiandan/css/main.css": "sites/all/themes /jiandan/less/main.less"
                           }
                }
             },
      watch: {
         styles: {
                // Which files to watch (all .less files recursively in the less   directory)
             files: ['sites/all/themes/jiandan/less/**/*.less'],
             tasks: ['less'],
             options: {
                nospawn: true
               }
       }
    }
});

grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-contrib-watch');

grunt.registerTask('default', ['watch']);
};

Шаг 4: Настройте пакет

cd YOUR_PROJECT_DIRECTORY
npm init

Выше будет предложено предоставить дополнительную информацию о вашем проекте.

Когда вы закончите, откройте файл package.json, расположенный в каталоге вашего проекта, и добавьте следующие строки кода:

"devDependencies": {
   "grunt": "~0.4.1",
   "grunt-contrib-less": "~0.5.0",
   "grunt-contrib-watch": "~0.4.0"

},

Затем введите следующую команду для установки зависимостей пакета:

npm install

Шаг 5: Запусти Грант

grunt

Ну вот и все, и вы можете собрать все свои меньше в один кадр. Я согласен, что изначально это выглядит сложно, но как только вы к этому привыкнете, вы найдете его очень простым. Все, что вам нужно сделать, это создать файл конфигурации для каждого проекта, а Grunt позаботится обо всем остальном.

Похоже, что это результат этой ошибки в Less 1.6.1 (в основном, Less завершается ошибкой, если расширяется какой-то другой модуль Array.prototype). обновление less-middleware более новая версия Less должна помочь (вы можете обновить установку, изменив версию в этом файле на ~1.6.3 если он не обновляется автоматически).

Другие вопросы по тегам