我设置了较少的中间件来进行较少的动态编译,它在很长一段时间内都运行良好,但是我正在更改一些软件包,进行npm更新等等,但没有什么真的不那么相关......
它停止了工作。当我请求例如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' }));
答案 0 :(得分:0)
看起来这是Less 1.6.1中that bug的结果(基本上,如果其他模块扩展Array.prototype
则Less会失败)。将less-middleware
更新为更新的更少版本应该会有所帮助(如果版本不自动更新,您可以通过将this file中的版本更改为~1.6.3
来更新您的安装。)
答案 1 :(得分:0)
我可能无法解决您的确切问题,但这就是我使用 grunt 进行 less 编译的方式,实际上不仅仅是我,而是大多数人都这样做,而且我发现它很方便。
grunt提供了一种很好的方法来自动将 LESS 转换为 CSS 的过程。最初,您必须设置一些工具,但一旦完成,您就可以轻松地将系统用于所有项目。
Grunt是一个基于JavaScript的任务运行器,可配置为密切关注对LESS文件所做的更改。当内容发生变化时,它会自动将文件编译成缩小的CSS文件。
第1步:安装Node.js 从Nodejs.com获取安装包,然后安装它。二进制文件适用于Mac OS X,Windows,Linux和SunOS。您也可以从源代码编译它。
第2步:安装Grunt 使用Node包管理器安装Grunt:
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
那就是它,你可以一次性编译你所有的少。 我同意,最初它看起来很复杂但是一旦你习惯了它,你会发现它非常简单。您需要做的就是为每个项目创建一个配置文件,Grunt将负责其余的工作。
答案 2 :(得分:0)
似乎是权限问题。我刚刚设置了新权限,一切正常。因此,如果有任何人遇到同样的问题,请确保较少的人可以创建新文件,并且您的应用程序可以读取较少的原始文件。
抱歉浪费你的时间。
编辑:如果你使用 @import url(“something.less”)也会出现问题,请尝试删除网址: @impurt“something.less”