Меньше не скомпилируется как промежуточное ПО 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
если он не обновляется автоматически).