Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js less.render在具有不同目录中的多个导入文件的NodeJ中不起作用_Node.js_Less - Fatal编程技术网

Node.js less.render在具有不同目录中的多个导入文件的NodeJ中不起作用

Node.js less.render在具有不同目录中的多个导入文件的NodeJ中不起作用,node.js,less,Node.js,Less,我在我的应用程序中使用了较少的方法来实现主题化,并使用nodejs-LESS模块将较少的文件编译成CSS,但在某个特定的场景中它不起作用 我还在我的应用程序中使用Bootstrap,并且使用无Bootstrap的源代码,我只编译我希望在我的应用程序中使用的css 我还可以覆盖我的各种主题中的引导变量和混合。因此,在编译Bootstrap时,我也需要考虑我的主题变量和MIXIN。 区分引导变量/mixin和CSS规则我创建了两个不同的文件 application_variables.less-它

我在我的应用程序中使用了较少的方法来实现主题化,并使用nodejs-LESS模块将较少的文件编译成CSS,但在某个特定的场景中它不起作用

我还在我的应用程序中使用Bootstrap,并且使用无Bootstrap的源代码,我只编译我希望在我的应用程序中使用的css

我还可以覆盖我的各种主题中的引导变量和混合。因此,在编译Bootstrap时,我也需要考虑我的主题变量和MIXIN。 区分引导变量/mixin和CSS规则我创建了两个不同的文件

  • application_variables.less-它包含所有必需的引导变量和混合变量
  • application.less-它包含所有必需的引导CSS规则
应用程序的目录结构

|
|--sample_application
    |--resources
    |   |--libraries
    |      |--bootstrap
    |           |--css
    |           |   |--application.less
    |           |--less
    |           |   |--application_variables.less    
    |--themes
        |--red
        |   |--mixins
        |   |   |--mixins.less
        |   |--variables
        |   |   |--variables.less    
        |   |--red.less    
        |--blue
        |   |--mixins
        |   |   |--mixins.less
        |   |--variables
        |   |   |--variables.less    
        |   |--blue.less    
        |--themes.less
解释哪个文件包含什么?

1/示例应用程序/themes//mixin/mixin.less:-此文件包含所有特定于应用程序的mixin和重写的引导程序mixin

2/示例应用程序/主题//变量/变量.less:-此文件包含所有特定于应用程序的变量和重写的引导变量

3/示例应用程序/themes/.less:-此文件包含该特定主题的混音和变量的文件导入

@import "./variables/variables";
@import "./mixins/mixins";
4/示例应用程序/themes/theme.less:-此文件包含两个文件导入。第一个用于引导变量,即application_variables.less,第二个用于特定主题的基本文件导入,例如red.less/blue.less

@import "application_variables.less";
@import "red/red.less";
5/示例应用程序/resources/libraries/bootstrap/css/application.less:-此文件包含一个文件导入,即/themes/themes.less和所有必需的引导css规则

@import "theme.less";
/*Bootstrap CSS rules*/
6/示例应用程序/资源/库/引导程序/less/application\u变量。less:-此文件包含所有必需的引导程序变量和混合

现在我有了一个节点脚本文件,它进行了无引导编译,即编译bootstrap.js

var fs = require("fs");
var less = require('less');

(function() {
    var bsLessContent = fs.readFileSync("sample_application/resources/libraries/bootstrap/css/application.less");
    less.render(bsLessContent.toString(), {
        paths : [ "sample_application/themes/", "sample_application/resources/libraries/bootstrap/less/"],
        compress : true
    }, function(e, output) {
        fs.writeFileSync("sample_application/resources/libraries/bootstrap/css/application.css", output);
    });
})();
但是当我运行这个脚本时,我得到了以下错误

{ [Error: 'application_variables.less' wasn't found]
   type: 'File',
   message: '\'application_variables.less\' wasn\'t found',
   filename: 'sample_application\\themes\\theme.less',
   index: 18,
   line: 2,
   callLine: NaN,
   callExtract: undefined,
   column: 0,
   extract:
    [ '@import "application_variables.less";',
      '@import "red/red.less";' ] }
然后我尝试使用相对路径,但仍然会产生相同的错误

{ [Error: './../resources/libraries/bootstrap/less/application_variables.less' wasn't found]
   type: 'File',
   message: '\'./../resources/libraries/bootstrap/less/application_variables.less\' wasn\'t found',
   filename: 'sample_application\\themes\\theme.less',
   index: 18,
   line: 2,
   callLine: NaN,
   callExtract: undefined,
   column: 0,
   extract:
    [ '@import "./../resources/libraries/bootstrap/less/application_variables.less";',
      '@import "red/red.less";' ] }

请注意,由于源代码是以字符串形式提供给编译器的,因此您需要显式设置原始文件路径,以便编译器可以将其用作导入的基本路径,否则它就无法知道您指定的所有路径都是相对于哪些路径的(很可能只使用
cwd
,但它几乎是“随机的”当它实际用于导入时,它不再需要指向您的项目根。例如:

var fs=require('fs'),
path=require('path'),
更少=需要(“更少”);
(功能(){
var src=“foo/bar/baz.less”;
less.render(fs.readFileSync(src).toString(){

文件名:path.resolve(src),//也许您应该创建一个文件较少的示例,以显示出哪里出了问题,并确保没有打字错误。我回答了。@seven Phase max:它起作用了。您能否将该解决方案发布为answer,以便我可以接受它。如果您定义了文件名,则导入程序将知道您的文件来自何处,以便它可以相对于该文件进行导入@最多七个阶段如果我介绍的较少的文件使用路径别名,
{filename:path.resolve(src)}
无法解析为正确的路径,有什么解决方案吗?我尝试用绝对路径替换路径别名,但
较少。render
似乎无法为我提供修改路径的位置。你能帮我吗?谢谢。
var fs   = require('fs'),
    path = require('path'),
    less = require('less');

(function() {
    var src = "foo/bar/baz.less";
    less.render(fs.readFileSync(src).toString(), {
        filename: path.resolve(src), // <- here we go
    }, function(e, output) {
        console.log(output.css);
    });
})();