2016-09-28 21 views
15

Câu hỏi đầu tiên của tôi là về cách chuyển đổi này được đề xuất cho các dự án đơn giản, chỉ để Pre-Process/Concat/Minify?Chuyển từ Gulp sang Webpack

Hiểu tương lai này "tiêu chuẩn", như Webpack ở cùng với PostCss-NextCss-Autoprefixer, vv là như ám ảnh tôi ....

Vì vậy, điều này dẫn đến câu hỏi tiếp theo của tôi, là có bất kỳ hướng dẫn rằng sẽ dẫn đến các nhiệm vụ đơn giản như tôi đã nói trong câu hỏi đầu tiên của mình?

Hoặc là một cách dễ dàng để thay đổi tôi gulpfile.js đến một webpack-config.js

nhiệm vụ bình thường của tôi trong ngụm không thực hiện những điều tốt nhất nhưng làm việc tốt:

//load plugins 
var gulp = require('gulp'), 
runSequence = require('run-sequence'), 
sass  = require('gulp-ruby-sass'), 
compass  = require('gulp-compass'), 
rev   = require('gulp-rev'), 
revDel  = require('rev-del'), 
del   = require('del'), 
minifycss = require('gulp-minify-css'), 
uglify  = require('gulp-uglify'), 
rename  = require('gulp-rename'), 
concat  = require('gulp-concat'), 
notify  = require('gulp-notify'), 
plumber  = require('gulp-plumber'), 
watch  = require('gulp-watch'), 
path  = require('path'); 


    //the title and icon that will be used for the Grunt notifications 
    var notifyInfo = { 
    title: 'Gulp', 
    icon: path.join(__dirname, 'gulp.png') 
    }; 

    //error notification settings for plumber 
    var plumberErrorHandler = { errorHandler: notify.onError({ 
    title: notifyInfo.title, 
    icon: notifyInfo.icon, 
    message: "Error: <%= error.message %>" 
    }) 
}; 

//patches 
var paths = { 
    scriptsAbs : '_coffeescript/', 
    stylesAbs: '_scss/', 
    scriptsCom : '_coffeescript/' + '**/*.js', 
    stylesCom :'_scss/' + '**/*.scss', 
    cssCom : 'resources/css', 
    jsCom : 'resources/js', 
    imgCom : 'resources/img' 
}; 

gulp.task('clean', 
    function (cb) { 
    del([ 
     paths.cssCom + '/*', 
     paths.jsCom + '/*' 
     ], cb); 
    }); 

//styles 
gulp.task('styles', 
    function() { 
    return gulp.src(paths.stylesCom) 
    .pipe(plumber(plumberErrorHandler)) 
    .pipe(compass({ 
     sass: '_scss', 
     css: paths.cssCom, 
     image: paths.imgCom, 
     style: 'expanded', 
     relative: true, 
     require: ['normalize-scss', 'susy'] 
    })) 
    .pipe(gulp.dest(paths.cssCom)) 
    .pipe(rename({ suffix: '.min' })) 
    .pipe(minifycss()) 
    .pipe(gulp.dest(paths.cssCom)) 
    .pipe(rev()) 
    .pipe(gulp.dest(paths.cssCom)) 
    .pipe(rev.manifest()) 
    .pipe(revDel({ dest: paths.cssCom })) 
    .pipe(gulp.dest(paths.cssCom)) 
    .pipe(notify({ message: 'Styles task completed' })) 
    }); 

//scripts 
gulp.task('scripts', 
    function() { 
    return gulp.src(paths.scriptsCom) 
    .pipe(plumber(plumberErrorHandler)) 
    .pipe(concat('main.js')) 
    .pipe(gulp.dest(paths.jsCom)) 
    .pipe(rename({ suffix: '.min' })) 
    .pipe(uglify()) 
    .pipe(gulp.dest(paths.jsCom)) 
    .pipe(rev()) 
    .pipe(gulp.dest(paths.jsCom)) 
    .pipe(rev.manifest()) 
    .pipe(revDel({ dest: paths.jsCom })) 
    .pipe(gulp.dest(paths.jsCom)) 
    .pipe(notify({ message: 'Scripts Concatenated completed' })) 
    // .pipe(reload({stream:true})); 

}); 


gulp.task('default', ['clean','styles','scripts'], function(){ 
    gulp.watch(paths.stylesCom, ['styles']) 
    gulp.watch(paths.scriptsCom, ['scripts']) 

//watch .php files 
// gulp.watch(['*.php'], ['bs-reload']) 
}); 

Và tôi bắt đầu sử dụng postcss rằng đang làm cho luồng công việc của tôi, mm, tốt hơn ... đôi khi.

Ý kiến ​​của bạn về tất cả điều này là gì? Đâu là con đường đúng để bắt đầu?

EDIT // 28 Tháng sáu 2017

Tại ngày này tiến bộ của chúng tôi với Webpack 1 là siêu hài lòng và thành công, công việc của chúng tôi là khá nhanh hơn nhiều và sự phụ thuộc của chúng tôi trong công cụ này là không thể thay đổi.

Đây là webpack.config.js mà chúng ta sử dụng hàng ngày:

"use strict"; 

var webpack = require('webpack'); 
var glob = require('glob-all'); 
var ExtractTextPlugin = require("extract-text-webpack-plugin"); 
var BrowserSyncPlugin = require('browser-sync-webpack-plugin'); 

let start = { 

    entry: { 
     scripts: glob.sync(
      [ 
      './_javascript/*.js', 
      './_cssnext/*.pcss' 
      ] 
     )}, 

    output: { 
     path: './resources/js', 
     filename: 'bundle--[name].js' 
    }, 
    watchOptions: { 
     poll: true 
    }, 

    postcss: function (webpack) { 
     return [ 
      require("postcss-import")({addDependencyTo: webpack}), 
      require("postcss-url")(), 
      require("precss")(), 
      require("postcss-cssnext")(), 
      require('postcss-font-magician')(), 
      require("postcss-reporter")(), 
      require("postcss-browser-reporter")(), 
      require('postcss-inline-svg')(), 
      require('postcss-urlrev')(), 
      require('postcss-fontpath')(), 
      require('postcss-object-fit-images')() 
     ] 
    }, 

    module: { 
     loaders: [ 
      { 
       test: /\.jsx?$/, 
       loader: 'babel-loader' 
      }, 
      { 
       test: /\.p?css$/, 
       loader: ExtractTextPlugin.extract(
        'style-loader', 
        'css-loader!postcss-loader' 
       ) 
      } 
     ] 
    }, 


    plugins: [ 
     new webpack.optimize.CommonsChunkPlugin({name: 'scripts', filename: 'bundle--[name].js'}), 
     new webpack.optimize.UglifyJsPlugin({ 
      compress: { 
       warnings: false 
      } 
     }), 
     new ExtractTextPlugin("../css/bundle--styles.css"), 
     new BrowserSyncPlugin({ 
      host: 'localhost', 
      port: 3000, 
      proxy: 'localhost:8002', 
      browser: 'google chrome', 
      ghostMode: false 
     }) 
    ] 

}; 

module.exports = start; 

Nhưng lần có thay đổi và là thời gian để phát triển để Webpack 3, và bây giờ chúng tôi đang trong quá trình thay đổi webpack.config.js này lên phiên bản 3

CẬP NHẬT 24.07.17 || v1 (Tryout 10000,1)

[Move from Webpack 1 to Webpack 2/3]

Trả lời

6

Ok, tôi nhận được một số lớn đạt được nhờ vào tutroial này: https://www.phase2technology.com/blog/bundle-your-front-end-with-webpack/

tiếp cận đầu tiên của tôi là thế này:

webpack-config.js

'use strict'; 

const webpack = require('webpack'), 
    path   = require('path'), 
    autoprefixer = require('autoprefixer'), 
    glob   = require('glob'); 

let script = { 
    entry: { 
     'scripts': glob.sync('./_javascript/*.js'), 
    }, 
    module: { 
     loaders: [ 
      // Javascript: js, jsx 
      { 
       test: /\.jsx?$/, 
       loader: 'babel-loader' 
      }, 
      // CSS: scss, css 
      { 
       test: /\.s?css$/, 
       loaders: ['style', 'css', 'sass', 'postcss-loader'] 
      }, 
      // SVGs: svg, svg?something 
      { 
       test: /\.svg(\?.*$|$)/, 
       loader: 'file-loader?name=/img/[name].[ext]' 
      }, 
      // Images: png, gif, jpg, jpeg 
      { 
       test: /\.(png|gif|jpe?g)$/, 
       loader: 'file?name=/img/[name].[ext]' 
      }, 
      // HTML: htm, html 
      { 
       test: /\.html?$/, 
       loader: "file?name=[name].[ext]" 
      }, 
      // Font files: eot, ttf, woff, woff2 
      { 
       test: /\.(eot|ttf|woff2?)(\?.*$|$)/, 
       loader: 'file?name=/fonts/[name].[ext]' 
      } 
     ] 
    }, 
    output: { 
     path: './resources/js', 
     filename: 'bundle--[name].js' 
    }, 
    plugins: [ 
     new webpack.optimize.CommonsChunkPlugin(['scripts'], 'bundle--[name].js'), 
     new webpack.optimize.UglifyJsPlugin({ 
     compress: { 
     warnings: false 
    } 
}) 
] 
}; 

let style = { 
    entry: { 
     'styles': glob.sync('./_nextcss/*.css'), 
    }, 
    module: { 
     loaders: [ 
      { 
       test: /\.s?css$/, 
       loaders: ['style', 'css', 'sass', 'postcss-loader'] 
      }, 
     ] 
    }, 
    postcss: function (webpack) { 
     return [ 
      require("postcss-import")({ 
       addDependencyTo: webpack 
      }), 
      require("postcss-url")(), 
      require("postcss-cssnext")(), 
      require("postcss-browser-reporter")(), 
      require("postcss-reporter")(), 
     ] 
    }, 
    output: { 
     path: './resources/css', 
     filename: 'bundle--[name].css' 
    }, 
}; 

module.exports = [ 
    script, 
    style, 
]; 

Điều này tạo ra bundle--script.js thành công, nhưng tôi đang gặp một số vấn đề với phần css.

Nó sẽ không trước quá trình bất cứ điều gì:/

tôi sẽ cập nhật ở đây nếu tôi nhận được để làm việc này trong khi chờ đợi, tôi sẽ thực sự đánh giá cao hơn nhiều, nếu ai đó có thể hướng dẫn cho tôi.

0

Tôi không nghĩ rằng bạn sẽ cần bộ tải xuống postcs. Ý tôi là, trong lúc này. Bạn chỉ di chuyển từ công cụ này sang công cụ khác, vì vậy bạn nên giữ càng ít càng tốt.

{ 
    test: /(\.css|\.scss)$/, 
    include: path.join(__dirname, 'src'), 
    loaders: ['style-loader', 'css-loader', 'sass-loader'] 
} 

Tâm trí rằng include bên trong mã của tôi tùy thuộc vào cấu hình của bạn.Sau đó tôi sẽ xem xét để thoát khỏi con đường 'tương đối' bạn có trong gulp. Nó có thể phá vỡ mọi thứ của bạn nếu bạn muốn duy trì một môi trường developmentproduction. Chỉ là kinh nghiệm cá nhân.

4

Đối với các dự án đơn giản, tôi không khuyên bạn nên chuyển đổi. Cuối cùng nó là một hương vị cá nhân tôi nghĩ, và tôi thích xử lý hậu kỳ thông qua javascript dễ hiểu (gulp).

Như bạn đã nói trong câu hỏi, thiết lập hiện tại của bạn hoạt động tốt: vậy tại sao khắc phục sự cố không bị hỏng? Tôi sẽ tập trung vào việc tái cấu trúc mã gulp của bạn để làm cho nó dễ đọc hơn một chút, chia các chức năng dài thành các nhiệm vụ gulp nhỏ hơn.

Cuối cùng, việc sử dụng webpack yêu cầu phải tìm hiểu rất nhiều tùy chọn cấu hình liên quan đến webpack cụ thể, trong khi với gulp, bạn chủ yếu chỉ là các lệnh vanilla js.

+1

Cảm ơn quan điểm của bạn, Nhưng tôi phải nói rằng quy trình làm việc của chúng tôi hoàn toàn nhanh hơn trong Webpack so với ở Gulp. – Locke

+2

Ok, cảm ơn bạn đã cập nhật câu trả lời của mình với cấu hình webpack! – Oli

0

Các khái niệm về Gulp và Webpack khá khác nhau: Bạn cho Gulp cách để đặt mã front-end cùng nhau bước-by-step, nhưng bạn nói Webpack bạn muốn thông qua một tập tin cấu hình. Vì vậy, không có bản đồ một-một dễ dàng nếu bạn đang chuyển đổi.

Công ty chúng tôi đã chuyển từ Gulp sang Webpack trong năm qua. Tôi thấy rằng sự hiểu biết về sự khác biệt của hai công cụ này rất hữu ích cho quá trình chuyển đổi. Đây là một bài viết ngắn (đọc 5 phút) Tôi đã viết giải thích sự thay đổi suy nghĩ: https://medium.com/@Maokai/compile-the-front-end-from-gulp-to-webpack-c45671ad87fe

Mặc dù quá trình chuyển đổi của chúng tôi mất một thời gian, chúng tôi đã tìm ra cách chuyển tất cả những gì chúng tôi đã làm trong Gulp sang Webpack. Vì vậy, đối với chúng tôi, mọi thứ chúng tôi đã làm trong Gulp, chúng tôi cũng có thể thực hiện thông qua Webpack, nhưng không phải là cách khác.

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