2016-04-21 51 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

相關問題