函数不能在控制指令或其他mixin中定义

在我的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软件包,但它仍然给出同样的错误。然后我看了_lists.scss该文件在81行有一个代码。我删除了这个BU它给出同样的错误。我该怎么办?

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

       

网上收集的解决方案 "函数不能在控制指令或其他mixin中定义"

我也面临类似的问题。 而我的项目正在使用gulp-sass和compass-mixins 。 由于heart.cooks.mind指出,gulp -sass取决于节点sass 。 而node-sass将其依赖的libsass升级到版本库libsass 3.3.3 Delorean自从node-sass 3.5.1以来。

不过, libsass之一3.3.3 Delorean的变化与这个问题有关:
'不允许在控制指令或混入中定义函数(@mgreter,#1550)'

显然, compass-mixins中的 _lists.scss打破了这个规则。 似乎有人向compass-mixins提出问题 ,他们有想法修复它。

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

我有同样的问题,请参阅节点sass版本3.5.3是打破构build和强制锁gulp-sass使用特定的节点sass库使用shrinkwrap,并避免使用节点sass的错误版本

我正在使用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文件仍然会拉大于“节点sass”大于^ 3.5.3。

如果我使用旧版本的“node-sass”3.4.2,则错误消失。 我不知道如何以自动的方式解决这个问题。 在一个捏,我能够解决这个问题,通过复制该文件夹(即使用3.4.2)从一个不同的项目工作。 现在编译。

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

我(暂时)做的是在全局安装node-sass v3.4.2,然后用这个较旧的版本replacenode-sass的gulp-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/; 

顺便说一句,有一个PR等待这个合并 。 但是如果你今天想使用这个,那么合并的分叉也是。
如果你想使用后者,只需把compass-mixins: tjenkinson/compass-mixins放在你的package.json ,一切都会好的。

更新: – 现在公关中还提到了后者的npm包

更新2: – 这应该不再是现在v0.12.8的问题