5

Sau khi di chuyển đến El Capitan, có vẻ như người dùng đang gặp vấn đề với cài đặt grunt, có thể liên quan đến những thay đổi không có gốc của El Capitan. Đặc biệt, chạy lệnh grunt --force dẫn đến lỗi EPERM. Các quy trình làm việc như sau:Có phải 'cấu hình grunt cũ của El Capitan' không có gốc rễ?

NPM Giả sử đã được cài đặt, điều hướng đến thư mục grunt với package.json và gruntfile.js và gọi grunt:

grunt --force 

Ví dụ Gruntfile.js tập tin nội dung:

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

}; 

Ví dụ nội dung tập tin 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" 
    } 
} 

Các resul lỗi ting EPERM như sau:

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

Điều thú vị là, Ruby và Compass cũng được cài đặt, vì vậy nó không phù hợp với lý thuyết của không gốc rễ để viết thư cho các vấn đề thư mục, nhưng làm thế nào các lõi phụ thuộc có thể được di chuyển nơi khác (tức là/usr/local/bin) vì vậy đây không phải là vấn đề?

Trong El Capitan Betas, một số người dùng đã cho phép root thông qua terminal - mặc dù điều này dường như không còn hoạt động nữa vì lỗi vẫn còn và/usr/bin vẫn không cho phép thay đổi quyền.

+0

Tôi đã có một loạt các vấn đề với cài đặt đá quý toàn cầu sau khi El Capitan và phải cài đặt lại chúng một lần nữa để các '/ usr/local/thư mục bin' với 'sudo gem install -n/usr/local/bin compass'. Nhưng tôi không nhận ra lỗi của bạn. Có thể bất kỳ phụ thuộc nút nào được cài đặt trên toàn cầu trong thư mục gốc không? – Joao

+0

Có thể, tôi đã sử dụng 'sudo gem install -n/usr/local/bin compass' nhưng không giải quyết được vấn đề. Tôi thấy rằng khi chạy 'grunt -v --force' mọi thứ đều chạy tốt, nhưng khi mỗi tệp được ghi vào, nó không thể ghi, ví dụ' Cảnh báo: Không thể ghi "../img/svg-defs. svg "tệp (Mã lỗi: EPERM). Đã sử dụng --force, continue.' – beta208

+0

'nút cài đặt brew' sẽ đặt npm trong' usr/local/bin' để bạn có thể quên các rắc rối về quyền. Tôi cũng khuyên bạn nên khởi động lại để khôi phục và tắt 'csrutil' để tắt SIP. Đặc biệt là nếu bạn có các công thức nằm trong 'usr/local/sbin' DISCLAIMER: Tôi khuyên bạn nên vô hiệu hóa SIP nếu bạn có ý thức bảo mật khá tốt và tôi không chịu trách nhiệm về một' sudo rm -rf/.' kiểm tra 'brew install safe- rm' nếu bạn muốn thực sự cẩn thận. Chúc mừng. – suzumakes

Trả lời

1

Đối với những người chạy cùng một vấn đề, tôi phải loại bỏ việc sử dụng các tệp nhị phân được cài đặt vào đường dẫn:/usr/bin và cài đặt lại sau khi cập nhật đường dẫn/usr/local/bin. Ruby có xu hướng trở thành thủ phạm chính. Bởi vì tôi đã đấu tranh với việc định vị tất cả các cài đặt ruby ​​của mình, tôi đã cài đặt rbenv để quản lý các phiên bản ruby ​​của mình.

Sau đây lệnh terminal có thể hữu ích trong việc xác định đường dẫn có vấn đề của bạn:

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

Cài đặt phần mềm không phải hệ thống trên/usr/bin là một động thái xấu và hiện bị cấm ở El Capitan và có lý do chính đáng.

Tôi không quen với grunt, nhưng nếu bạn có thể sử dụng/usr/local/bin thì có lẽ mọi thứ đều hoạt động.

+0

Tôi đồng ý, do đó tôi đã in đậm phần câu hỏi hỏi 'làm thế nào' chúng có thể được di chuyển đến nơi khác để không phải là vấn đề. Tôi cũng muốn nói rõ rằng tôi đã không bỏ phiếu cho câu trả lời của bạn, vì vậy xin đừng downvote câu hỏi của tôi bất chấp. – beta208

Các vấn đề liên quan