可能无法在控制指令或其他mixin中定义函数

use*_*401 9 sass node.js npm compass-sass npm-install

在我的nodeJS项目中突然出现错误.我没有任何升级或更改.当我在命令行中编写NPM启动时,它会给出错误

 ERROR in ./~/css-loader?sourceMap!./~/postcss-loader!./~/sass-loader?
sourceMap&outputStyle=expanded&includePaths[]=c:/TFS/rc1/app/scss&includePaths[]

=c:/TFS/rc1/~/compass-mixins/lib&sourceMap&sourceMapContents=true!./app/scss/_toolkit.scss
    Module build failed:
    undefined
     ^
          Functions may not be defined within control directives or other mixins.
          in c:\TFS\rc1\node_modules\compass-mixins\lib\compass\functions\_lists.scss (line 81, column 3)
     @ ./app/scss/_toolkit.scss 4:14-337
Run Code Online (Sandbox Code Playgroud)

我重新安装了compass-mixins包但它仍然给出了相同的错误.然后我看了_lists.scss那个文件在81行有一个代码.我删除了它给它同样的错误.我该怎么办?

@if not(function-exists(compact)) {
  @function compact($vars...) {
    $list: ();
    @each $var in $vars {
        @if $var {
            $list: append($list, $var, comma);
        }
    }
    @return $list;
  }
}
Run Code Online (Sandbox Code Playgroud)

Vin*_*ang 6

我也面临类似的问题.我的项目是使用gulp-sass和compass-mixins.正如heart.cooks.mind所指出的那样,gulp -sass依赖于node-sass.并且node-sass将其依赖libsass之一升级到版本libsass 3.3.3 Delorean,因为node-sass 3.5.1.

但是,libsass 3.3.3 Delorean更改之一与此问题有关:
'禁止在控制指令或mixins(@ mgreter,#1550)中定义函数'

显然,指南针混合中的 _lists.scss 打破了这个规则.似乎有人向罗盘混音师提出了一个问题,他们有解决问题的想法.

在compass-mixins发布问题修复版之前,我的临时解决方法是手动删除node_modules/node-sass并且npm install node-sass@3.4.2


hea*_*ind 1

我正在使用 Gulp。gulp-sass 2.3.0 版本打破了它。返回到 2.2.0 版本,一切就都解决了。

编辑:

真正的罪魁祸首是“gulp-sass”节点模块内的节点模块,称为“node-sass”。您可以在“gulp-sass”的 package.json 文件中看到它只是拉取大于 ^3.5.3 的版本。

即使您返回并将“gulp-sass”重新安装到 2.2.0,正如我之前建议的那样,其中的 package.json 文件仍然会拉取大于 ^3.5.3 的“node-sass”。

如果我使用旧版本的“node-sass”3.4.2,该错误就会消失。我不知道如何以自动方式解决这个问题。在紧要关头,我能够通过从另一个有效的项目复制该文件夹(即使用 3.4.2)来解决问题。现在它可以编译了。

比我聪明的人能想出更好的方法来实现这个结果吗?