5

Po migracji do El Capitan wydaje się, że użytkownicy mają problem z instalacjami gruntowymi, prawdopodobnie powiązanymi z bezkształtnymi zmianami El Capitan. W szczególności uruchamianie polecenia grunt - siła powoduje błędy EPERM. Przepływ pracy jest w następujący sposób:Czy "El Capitan" to rootless łamanie starych konfiguracji?

Zakładając npm został zainstalowany, przejdź do katalogu grunt z package.json i gruntfile.js i powołać grunt:

grunt --force 

Przykład Gruntfile.js zawartość pliku:

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']); 

}; 

przykład zawartości pliku package.json:

{ 
"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" 
    } 
} 

resul Błędy ting EPERM są następujące:

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... 

Co ciekawe, Ruby i Compass są również zainstalowany, więc nie wyrównać z teorii rootless stanie pisać do zagadnień folderach ale jak rdzenie zależnościami być przeniesiony gdzie indziej (tj/usr/local/bin) , więc to nie jest problem?

Podczas El Capitan Betas, niektórzy użytkownicy sugerowali włączanie roota przez terminal - choć to już nie działa, ponieważ błąd nadal występuje, a folder/usr/bin nadal nie pozwala na zmiany uprawnień.

+0

miałem kilka problemów z instalacjami globalny gem po El Capitan i musiał ponownie zainstalować je ponownie do '/ usr/local/bin 'katalog z' sudo gem install -n/usr/local/bin compass'. Ale nie rozpoznaję twoich błędów. Czy jest możliwe, że wszystkie zależności węzłów są instalowane globalnie w katalogu głównym? – Joao

+0

Prawdopodobnie użyłem tego 'sudo gem install -n/usr/local/bin compass', ale nie rozwiązałem problemu. Uważam, że przy uruchomieniu 'grunt -v --force' wszystko działa dobrze, ale kiedy każdy plik idzie do pisania, nie może pisać, na przykład' Ostrzeżenie: Nie można pisać. ../img/svg-defs. svg "plik (kod błędu: EPERM). Używane --force, kontynuowanie. " – beta208

+0

' węzeł instalacji zaparzania' zainstaluje npm w 'usr/local/bin', dzięki czemu można zapomnieć o problemach z uprawnieniami. Polecam również ponowne uruchomienie odzyskiwania i "wyłączenie csrutil", aby wyłączyć SIP. Zwłaszcza jeśli masz formuły rezydujące w 'usr/local/sbin' DISCLAIMER: Polecam wyłączenie SIP, jeśli jesteś całkiem bezpieczny i nie jestem odpowiedzialny za przypadkowe" sudo rm -rf /. "Sprawdź' brew install safe- rm', jeśli chcesz być naprawdę ostrożny. Twoje zdrowie. – suzumakes

Odpowiedz

1

W przypadku tych samych problemów musiałem wyeliminować użycie plików binarnych zainstalowanych na ścieżce:/usr/bin i ponownie zainstalować po aktualizacji ścieżki/usr/local/bin. Ruby zazwyczaj był głównym winowajcą. Ponieważ zmagałem się z lokalizowaniem wszystkich moich instalacji ruby, w końcu zainstalowałem rbenv do zarządzania moimi wersjami ruby.

następujących poleceń terminala może być pomocne w identyfikacji swoich problematycznych ścieżki:

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

Instalowanie oprogramowania niesystemowego na/usr/bin jest złym posunięciem i jest teraz zabronione w El Capitan i nie bez powodu.

Nie jestem zaznajomiony z gruntem, ale jeśli możesz użyć/usr/local/bin zamiast tego prawdopodobnie wszystko działa.

+0

Zgadzam się, stąd odłożyłem moją część pytania, które pyta "jak" mogą być przeniesione gdzie indziej, więc to nie jest problem. Chciałbym również wyjaśnić, że nie zagłosowałem na twoją odpowiedź, więc proszę, nie kwestionuj mojego pytania na przekór. – beta208

Powiązane problemy