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

时间:2016-04-21 16:40:29

标签: node.js npm sass 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

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

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

5 个答案:

答案 0 :(得分:6)

我也面临类似的问题。我的项目正在使用gulp-sasscompass-mixins。正如heart.cooks.mind指出的那样,gulp-sass取决于node-sassnode-sass libsass libsass 3.3.3 Delorean之后node-sass 3.5.1将其中一个依赖libsass 3.3.3 Delorean升级为版本'Disallow functions to be defined in control directives or mixins (@mgreter, #1550)'

但是,compass-mixins之一的更改与此问题有关:
issue

显然,compass-mixins中的_lists.scss违反了这条规则。似乎有人将compass-mixins提升为{{3}},他们有解决问题的想法。

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

答案 1 :(得分:2)

我遇到了同样的问题,请参考node sass release 3.5.3 is breaking build并使用shrinkwrap强制锁定gulp-sass以使用特定节点sass库,并避免使用节点sass的错误版本

答案 2 :(得分:1)

我正在使用Gulp。版本2.3.0的gulp-sass打破了它。回到2.2.0版,你们都修好了。

编辑:

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

即使你回去重新安装" gulp-sass"到2.2.0,正如我之前建议的那样,那里的package.json文件仍然会拉出" node-sass"大于^ 3.5.3。

如果我使用旧版本的&#34; node-sass&#34; 3.4.2错误消失了。我不知道如何以自动方式解决这个问题。在紧要关头,我能够通过从一个有效的不同项目中复制该文件夹(即使用3.4.2)来解决问题。现在它编译。<​​/ p>

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

答案 3 :(得分:1)

我(暂时)做的是全局安装node-sass v3.4.2,然后用这个旧版本替换gulp-sass版本的node-sass(它位于gulp-sass / node_modules中)。

sudo npm install -g node-sass@3.4.2;
sudo cp -r /usr/lib/node_modules/node-sass/ /usr/lib/node_modules/gulp-sass/node_modules/;

答案 4 :(得分:1)

顺便说一句,这里有一个PR waiting to be merged。但如果你今天想要使用它,那么a fork of the merge也是如此 如果你想使用后者,那么只需将compass-mixins: tjenkinson/compass-mixins放在package.json中,一切都会好的。

更新: - 还有PR现在提到的后者的npm包

更新2: - 现在不再是v0.12.8的问题