2016-04-21 42 views
9

在我的nodeJS项目中突然出现错误。我没有任何升级或更改。 当我写NPM开始在命令行它给这个错误函数可能未在控制指令或其他mixin中定义

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 

我重新安装指南针混入包,但它还是给我看了_lists.scss该文件在81行有一个代码相同error.Then .I删除了它,它给出了同样的错误。我该怎么办?

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

您在使用LibSass还是官方Ruby Sass? – cimmanon

+0

这是反应JS项目不红宝石project.How我可以检查它是否是libsass或红宝石sass? – user1688401

+1

我并不熟悉您使用的其他任何东西,但对于Unix或Mac OS,在终端中运行'sass -v'至少会确认您已安装Ruby Sass。 – cimmanon

回答

1

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

编辑:

真正的罪魁祸首是被称为“节点青菜”该“吞掉-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)从一个不同的项目工作解决该问题。现在编译。

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

+0

你可以发出命令please.I .net开发者我是新节点js -npg envirmont – user1688401

+0

你能澄清这是如何解决这个问题吗?如果函数最终在if语句内被限制,简单地摆脱错误消息将无济于事。 – cimmanon

+0

正确。它不“解决”问题。这是使用Node模块的固有风险。每个节点模块(不只是gulp-sass)都有自己的package.json文件。这将始终拉大于^ x.x.x。从长远来看,对于在其他地方维护的fork代码总是一个坏主意。它为我们今天“解决”了问题,这很重要。但是根本问题是由于缺乏对子孩子依赖关系的控制而使用Node的一种内在风险(用于我们的目的)。 –

4

我也面临类似的问题。我的项目使用gulp-sasscompass-mixins。正如heart.cooks.mind指出的那样,gulp-sass取决于node-sass。并从node-sass 3.5.1node-sass升级其依赖libsass版本libsass 3.3.3 Delorean之一。

然而,libsass 3.3.3 Delorean改变一个与此有关的问题:
'Disallow functions to be defined in control directives or mixins (@mgreter, #1550)'

显然,_lists.scss在compass-mixins打破此规则。似乎有人提出issuecompass-mixins,他们有想法修复它。

compass-mixins释放的问题固定的版本,我的临时解决方法是手动删除node_modules /节点青菜和NPM安装[email protected]

+0

对于那些自动构建,这不是一个真正的选择。在'package.json'中将''node-sass“:”3.4.2“'添加到'devDependencies'是一个更好的方法。当重大变化得到解决后,只需移除该线路,您就可以走了。 – GFoley83

1

我(暂时)做了什么,是全局安装node-sass v3.4.2,然后替换gulp -sass版本的节点sass(它位于gulp-sass/node_modules内)与这个较旧的版本。

sudo npm install -g [email protected]; 
sudo cp -r /usr/lib/node_modules/node-sass/ /usr/lib/node_modules/gulp-sass/node_modules/; 
1

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

更新: - 还有一个NPM包在PR现在

更新提及的后2: - 这应该不再与v0.12.8一个问题,现在

+0

升级到0.12.8为我修好了。 – Nathan

相关问题