1

我需要在特定类型的构建期间有条件地导入文件。使用grunt-contrib-jshint@0.7.0which is on the topless@1.4.2

到目前为止我尝试过的...

尝试使用受保护的 mixin 来确定我需要的构建类型,即跳过某些在开发模式下中断的较少文件的导入。

@isProduction: 1;

...

.getImports() when (@isProduction = 1){
}

.getImports() {
    @import "productionStyles";
}

...
.getImports();

但是,这似乎失败了,它一直在尝试导入和解析productionStyles.less。我猜受保护的 mixins 没有涵盖@import,那么您将如何解决呢?

我也试过

@productionStyles: "productionStyles"; // or 0

...
@productionStyles: 0;


.getImports() when not (@productionStyles = 0){
    @import "@{productionStyles}";
}

...

同样有效,它无论如何都会尝试导入它>> FileError: '0.less' wasn't found in ...

我开始认为它需要一个更大的重构 wheredevStyles并且productionStyles两者都是一个东西,我只是在它们之间切换 - 只是 productionStyles 是一个添加,由于 deps 只能在完整构建后编译,我宁愿通过解决这个问题有条件地编译。

我也可以不使用grunt-contrib-jshint并编写自己的 less 解析器,但想先探索内置选项。

由于productionStyle.less引用了几个不在文件系统中的文件,是否可以忽略@imports那些失败并继续构建?由于其他地方可能出现解析器错误,我不希望禁用所有错误的错误检查/中断...

4

1 回答 1

3

我已经使用switch 参数解决了您的问题:

索引.html

  <!DOCTYPE html>
  <html>
    <head>
      <title></title>
      <link rel="stylesheet/less" type="text/css"  href="style.less" />
      <script src="less.js" type="text/javascript"></script>
    </head>
    <body>
      [foo]
    </body>
  </html>

无风格

.mixin(production) {
  @import "test.less";
  background: @color;
}

.mixin(dev) {
  background: green;
}

html {
  .mixin(production);
}

无测试

@color: red;

less.js是直接从项目页面下载的 less v1.4.1 。

关于代码应该导致红色背景。切换到html { .mixin(dev); }禁用@import和背景变为绿色。

您的解决方案也可能会起作用,但您在 HTML 或类似内容中存在错误 - 我还没有检查过。

于 2013-10-15T15:48:13.763 回答