5

Nach der Migration nach El Capitan scheint es, dass Benutzer ein Problem mit Grunt-Installationen haben, möglicherweise im Zusammenhang mit den wurzellosen Änderungen von El Capitan. Insbesondere führt das Ausführen des Befehls grunt --force zu EPERM-Fehlern. Der Workflow wird wie folgt dar:Ist 'El Capitan' wurzellos, bricht alte Grunt-Konfigurationen?

Unter der Annahme, npm installiert wurde, navigieren Sie zu dem Grunzen Verzeichnis mit package.json und gruntfile.js und rufen Grunzen:

grunt --force 

Beispiel Gruntfile.js Dateiinhalt:

module.exports = function(grunt) { 

    // All configuration goes here 
    grunt.initConfig({ 
     pkg: grunt.file.readJSON('package.json'), 

     concat: { 
      // Configuration for concatenating files goes here. 
      dist: { 
       src: [ 
         '../js/libs/owl.carousel.js', 
         '../js/libs/jquery.actual.js', 
         '../js/libs/chosen.jquery.js', 
         '../js/libs/jquery.parallax.js', 
         '../js/src/common.js' 
       ], 
       dest: '../js/pro/global.js', 
      }, 
     }, 

     uglify: { 
      build: { 
       src: '../js/pro/global.js', 
       dest: '../js/pro/global.min.js', 
      }, 
     }, 


     imagemin: { 
      dynamic: { 
       files: [{ 
        expand: true, 
        cwd: '../img/src/', 
        src: ['**/*.{png,jpg,gif}'], 
        dest: '../img/pro/' 
       }] 
      } 
     }, 

     compass: { 
      dev: { 
       options: {    
        sassDir: '../sass', 
        cssDir: '../css', 
        fontsDir: '../fonts', 
        imagesDir: '../img/', 
        images: '../img/', 
        javascriptsDir: '../js/pro', 
        //environment: 'development', 
        outputStyle: 'compressed', 
        relativeAssets: true, 
        httpPath: '.', 
       } 
      }, 
     }, 

     watch: { 
      scripts: { 
       files: ['../js/**/**.js'], 
       tasks: ['concat', 'uglify'], 
       options: { 
        spawn: true, 
       }, 
      }, 
      images: { 
       files: ['../img/src/**.{png,jpg,gif}'], 
       tasks: ['imagemin'], 
       options: { 
        spawn: true, 
       } 
      }, 
      compass: { 
       files: ['../**/*.{scss,sass}'], 
       tasks: ['compass:dev'], 
      } 

     }, 

     svgstore: { 
      defaults: { 
       options: { 
        prefix : 'icon-', 
       }, 
       files: { 
        '../img/svg-defs.svg': ['../img/svg/*.svg'] 
       } 
      } 
     }, 


    }); 

    // Where we tell Grunt we plan to use this plug-in. 
    grunt.loadNpmTasks('grunt-contrib-concat'); 
    grunt.loadNpmTasks('grunt-contrib-uglify'); 
    grunt.loadNpmTasks('grunt-contrib-imagemin'); 
    grunt.loadNpmTasks('grunt-contrib-watch'); 
    grunt.loadNpmTasks('grunt-contrib-compass'); 
    grunt.loadNpmTasks('grunt-svgstore'); 

    // Where we tell Grunt what to do when we type "grunt" into the terminal. 
    grunt.registerTask('default', ['concat', 'uglify', /*'imagemin',*/ 'compass', 'svgstore', 'watch']); 

}; 

Beispiel package.json Dateiinhalt:

{ 
"name": "Call Me Maybe", 
"version": "0.2.0", 
"devDependencies": { 
    "grunt": "^0.4.5", 
    "grunt-contrib-compass": "^1.0.4", 
    "grunt-contrib-concat": "^0.5.1", 
    "grunt-contrib-imagemin": "^0.9.4", 
    "grunt-contrib-sass": "^0.9.2", 
    "grunt-contrib-uglify": "^0.9.2", 
    "grunt-contrib-watch": "^0.6.1", 
    "grunt-svgstore": "^0.5.0" 
    } 
} 

Die resul ting EPERM Fehler sind wie folgt:

Running "concat:dist" (concat) task 
Warning: Unable to write "../js/pro/global.js" file (Error code: EPERM). Used --force, continuing. 

Running "uglify:build" (uglify) task 
Warning: Unable to write "../js/pro/global.min.js" file (Error code: EPERM). Used --force, continuing. 

Running "compass:dev" (compass) task 
Warning: Command failed: /bin/sh: compass: command not found. Used --force, continuing. 
Warning: You need to have Ruby and Compass installed and in your system PATH for this task to work. More info: https://github.com/gruntjs/grunt-contrib-compass Used --force, continuing. 

Running "svgstore:defaults" (svgstore) task 
Warning: Unable to write "../img/svg-defs.svg" file (Error code: EPERM). Used --force, continuing. 

Running "watch" task 
Waiting... 

Interessanterweise sind Ruby und Kompass auch installiert, so dass es mit der Theorie der wurzellos nicht in der Lage ist ausrichten auf Ordner Themen zu schreiben, aber wie kann die Abhängigkeits Kerne an anderer Stelle bewegt werden (dh/usr/local/bin) das ist also kein Problem?

Während der El Capitan Betas haben einige Benutzer die Aktivierung von root via terminal vorgeschlagen - obwohl dies anscheinend nicht mehr funktioniert, da der Fehler weiterhin besteht und der/usr/bin-Ordner immer noch keine Erlaubnisänderungen zulässt.

+0

ich mit globalem gem Installationen nach El Capitan ein paar Problemen hatte und ließ sich auf den '/ usr/local wieder neu zu installieren/bin 'Verzeichnis mit' sudo gem installieren -n/usr/local/bin compass'. Aber ich erkenne deine Fehler nicht. Ist es möglich, dass alle Knotenabhängigkeiten global im Stammverzeichnis installiert sind? – Joao

+0

Möglicherweise habe ich das 'sudo-Juwel installiert -n/usr/local/bin compass' verwendet, aber das Problem nicht gelöst. Ich finde, dass beim Ausführen von 'grunt -v --force' alles gut läuft, aber wenn jede Datei zum Schreiben geht, kann sie nicht schreiben, zum Beispiel' Warning: Kann nicht schreiben "../img/svg-defs. svg "Datei (Fehlercode: EPERM). Verwendet --force, continuing.' – beta208

+0

'brew install node' wird npm in' usr/local/bin' setzen, so dass Sie Probleme mit Berechtigungen vergessen können. Ich empfehle auch einen Neustart zur Wiederherstellung und eine 'csrutil disable', um SIP auszuschalten. Vor allem, wenn Sie Formeln haben, die sich in 'usr/local/sbin' befinden. DISCLAIMER: Ich empfehle SIP zu deaktivieren, wenn Sie ziemlich sicherheitsbewusst sind und ich nicht verantwortlich bin für eine versehentliche' sudo rm -rf/.' check 'brew install safe- Wenn du wirklich vorsichtig sein willst. Prost. – suzumakes

Antwort

1

Für diejenigen, die das gleiche Problem hatten, musste ich die Verwendung von Binärdateien, die im Pfad/usr/bin installiert waren, eliminieren und nach dem Aktualisieren des Pfades/usr/local/bin neu installieren. Ruby war der Hauptschuldige. Weil ich Probleme damit hatte, all meine Ruby-Installationen ausfindig zu machen, habe ich schließlich rbenv installiert, um meine Ruby-Versionen zu verwalten.

Die folgende Terminal-Befehle können hilfreich sein, Ihre problematischen Pfade zu identifizieren:

which ruby 
gem environment 
gem uninstall [insert gem name here] 
[google how to set your paths to /usr/local/bin... (will be in a hidden file)] 
gem install [insert gem name here] 
0

Die Installation von Nicht-System-Software auf/usr/bin ist ein schlechter Schachzug und ist jetzt in El Capitan verboten, und das aus gutem Grund.

Ich bin nicht vertraut mit grunt, aber wenn Sie stattdessen/usr/local/bin verwenden können, dann funktioniert wahrscheinlich alles.

+0

stimme ich zu, daher habe ich meinen Teil der Frage, die fragt "wie" können sie anderswo verschoben werden, so dass es kein Problem ist. Ich möchte auch klarstellen, dass ich Ihre Antwort nicht abgelehnt habe, also bitte meine Frage nicht ablehnen. – beta208

Verwandte Themen