2015-12-09 4 views
7

Ich habe eine grunt Aufgabe, die JSCS auf einem JavaScript-Code-Basis läuft und es funktionierte, bis es Zeit kam, mit dem Build-Server zu integrieren, der neueste, stabile Versionen verwendet von grunt, npm/Knoten.Knoten/NPM/Grunt scheitert an jscs (grunt-jscs)

Das alles lief gut unter npm 1.XX.X, aber nachdem ich auf 2.XX.X aufgerüstet habe, brach es. Ich habe versucht, 3.XX.X, und das scheiterte auf die gleiche Weise wie 2.XX.X.

Ich nehme an die einschlägigen benötigten Teile der Ausgang

die cli sind:

$ node -v 
v5.2.0 

$ npm -v 
3.3.12 

$ grunt --version 
grunt-cli v0.1.13 
grunt v0.4.5 

$ grunt jscs 
Loading "jscs.js" tasks...ERROR 
>> TypeError: fn.call is not a function 
Warning: Task "jscs" not found. Use --force to continue. 

Aborted due to warnings. 

package.json:

{ 
"name": "Javascript", 
    "version": "1.0.0", 
    "private": true, 
    "devDependencies": { 
    "grunt": "~0.4.5", 
    "matchdep": "^0.3.0", 
    "grunt-contrib-watch": "~0.6.1", 
    "grunt-express": "~1.4.1", 
    "grunt-open": "~0.2.3", 
    "grunt-chmod": "~1.0.3", 
    "grunt-contrib-jshint": "~0.11.3", 
    "grunt-contrib-uglify": "~0.10.0", 
    "karma": "~0.13.15", 
    "grunt-karma": "~0.12.1", 
    "jasmine-core": "~2.3.4", 
    "karma-jasmine": "~0.3.6", 
    "phantomjs": "~1.9.18", 
    "karma-phantomjs-launcher": "~0.2.1", 
    "angular-mocks": "~1.2.28", 
    "jquery": "~2.1.4", 
    "underscore": "~1.8.3", 
    "grunt-contrib-clean": "~0.6.0", 
    "karma-coverage": "~0.5.3", 
    "grunt-jscs": "~2.3.0", 
    "grunt-contrib-concat": "~0.5.1" 
    } 
} 

Gruntfile.js config:

module.exports = function (grunt) { 
require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); 

grunt.initConfig({ 
    ..... 
    jscs: { 
     src: [ 
      'gruntfile.js', 
      '<%= sourceFolder %>/**/*.js', 
      '!<%= sourceFolder %>/angular/**', 
      '!<%= sourceFolder %>/es5-shim/**', 
      '!<%= sourceFolder %>/**/*[.-]min.js', 
      '!<%= sourceFolder %>/respond/*.js', 
      '!<%= sourceFolder %>/angular-ui-bootstrap/*.js', 
      '!<%= sourceFolder %>/analytics/angulartics*.js' 
     ], 
     options: { 
      config: '.jscsrc', 
      fix: true 
     } 
    } 
}); 
+0

Ich vermute, dass jscs auf dem Build-Server installiert ist und funktioniert? – kuzyn

+0

Das Problem war, dass ich eine alte Version von node/npm lokal ausgeführt habe und es dann nie funktioniert hat, dass der Build in dieser Umgebung läuft. Also, nein, der Build-Server funktioniert nicht und hat noch nie funktioniert. Lokal auf ~ 1.X node/npm funktioniert gut. – Mutmatt

+0

Haben Sie versucht, die node_module vollständig zu entfernen, den npm-Cache zu löschen und eine neue 'npm-Installation' des Projekts durchzuführen? – kuzyn

Antwort

0

grunt-express Projekt enthält eine Abhängigkeit, die diesen Fehler verursacht. grunt-express wurde in über 2 Jahren nicht veröffentlicht, daher habe ich mich entschieden, zu grunt-contrib-connect zu wechseln und stattdessen das zu verwenden und das hat mein Problem gelöst! Hoffe es hilft jedem, der auf dieses Problem stößt.

-1

Wann immer ich gebaut habe Probleme mit node.js/npm Upgrades, 10/10 mal war es eine fehlerhafte Abhängigkeit.

Versuchen Sie, die grunt-jscs Abhängigkeit 2.5 Stoßen: https://www.npmjs.com/package/grunt-jscs

+0

Stoßen, das schien nicht zu helfen:/ – Mutmatt

+0

Irgendein Unterschied in der Fehlerausgabe? Versuchen Sie, so viel Zeug wie möglich zu stoßen - Sie führen eine blutende Version von node/npm. Ich sprang in die 4.x-Serie und schluckte brauchte eine Menge Zeug, um wieder zu arbeiten - ich vermute, Grunzen ist die gleiche Geschichte. – staypuftman

+0

Ich habe [ncu] (https://www.npmjs.com/package/npm-check-updates) verwendet, um nach Updates zu suchen, und alles was nicht auf dem neuesten Stand ist, ist angular-mocks (das ist so, weil ich gerade aktiv bin) eine alte Version von eckigen). Derselbe Fehler – Mutmatt

-1

Auf dem Server: npm install jscs -g

+0

erklärt nicht wirklich, warum es nicht lokal arbeiten würde ... würde es auch nicht hinzufügen, um die package.json eine bessere Vorgehensweise zu sein, da die meisten Build-Server auf Build trotzdem sauber starten? – Mutmatt

+0

Es wird allgemein akzeptiert, Linter-Tools (jshint, jscs usw.) global zu installieren. Dies wird von JSCS empfohlen, siehe https://github.com/jscs-dev/node-jscs/issues/863.Wie für warum es nicht lokal arbeiten würde, ich denke, ich missverstanden Ihre Einrichtung/Frage – kuzyn

+0

Installation von jscs global schien nicht zu nichts zu helfen – Mutmatt

1

erstellt gerade ein Testprojekt, und ich war in der Lage, das Problem zu reproduzieren. Es ist in dieser Zeile:

require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); 

Verwenden load-grunt-tasks statt:

require('load-grunt-tasks')(grunt); 

Auch laufen npm i --save-dev load-grunt-tasks und Sie sind gut zu gehen!

+0

@Mutmatt hat dies nicht für Sie arbeiten? – Louy

+0

Dies schien nicht den Trick zu tun. Ich bekomme immer noch genau den gleichen Fehler – Mutmatt

+0

Kannst du eine 'npm Prune' machen? – Louy

Verwandte Themen