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