Less不会编译为nodejs中间件

时间:2014-01-30 03:28:54

标签: node.js less

我设置了较少的中间件来进行较少的动态编译,它在很长一段时间内都运行良好,但是我正在更改一些软件包,进行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' }));

3 个答案:

答案 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”