2016-09-28 41 views
15

我的第一個問題是關於這個開關對於簡單項目的建議如何,僅適用於Pre-Process/Concat/Minify?從Gulp切換到Webpack

與PostCss-NextCss-Autoprefixer等了解這個未來的「標準」,喜歡的WebPack在一起就像是困擾我....

所以這導致了我的下一個問題,是否有任何教程,會指導簡單的任務,就像我在第一個問題中所說的那樣?

或者是一個簡單的方法來改變我的gulpfile.jswebpack-config.js

我的正常任務一飲而盡不是最好的做法,但工作得很好:

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

而且我開始使用postcss那正在使我的工作流程,毫米,更好..有時候更好。

你對這一切有何看法?哪裏纔是正確的道路?

編輯// 2017年6月28日

在這一天我們的的WebPack 1的進展是超級滿意和成功,我們的工作流程是非常快速,我們在這個工具的依賴是不變的。

這是我們每天使用的webpack.config.js

"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; 

但是,時代已經改變,是時候發展到的WebPack 3,現在我們都在進步,這webpack.config.js更改爲版本3

UPDATE 24.07.17 || V1(試用10000.1)

[Move from Webpack 1 to Webpack 2/3]

回答

6

好吧,我得到一些偉大的實現得益於此tutroial: https://www.phase2technology.com/blog/bundle-your-front-end-with-webpack/

我的第一種方法是這樣的:

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, 
]; 

這會生成一個bundle--script.js成功,但我有一些問題的CSS部分。

它不會預先處理任何事情:/

我會在這裏更新,如果我得到在此期間來解決這個,我會很感激了,如果有人能指導我。

0

我不認爲你需要postcss加載器。我的意思是,暫時。你只是從一個工具移到另一個工具,所以你應該儘可能保持精益。

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

介意include我的代碼裏面取決於您的配置。之後,我會考慮擺脫你擁有的「相對」路徑。如果你想維護一個developmentproduction環境,它可能會破壞你的東西。只是個人經驗。

4

對於簡單的項目,我根本不會推薦開關。最後,我認爲這是一種個人品味,我更喜歡通過易於理解的JavaScript(gulp)進行後處理。

正如你在你的問題中所說的那樣,你現在的設置工作的很好:那麼爲什麼要修復那些沒有被破壞的東西呢?我會專注於重構你的gulp代碼,使其更具可讀性,將長功能分解爲更小的吞嚥任務。

最後,使用webpack需要學習很多特定的webpack相關的配置選項,而吞噬你大多隻是輸送vanilla js命令。

+1

感謝您的觀點,但我不得不說,我們的工作流在Webpack中比在Gulp中要快得多。 – Locke

+2

好的,感謝您使用webpack配置更新您的答案! – Oli

0

杯和的WebPack的概念有很大的不同:你告訴咕嘟咕嘟如何把前端代碼一起一步一步,但你告訴的WebPack 你想要什麼通過一個配置文件。因此,如果您正在切換,則不存在簡單的一對一映射。

我們公司在過去的一年裏從Gulp搬到了Webpack。我發現理解這兩種工具的差異對轉換非常有幫助。我寫了一篇短文(解讀5分鐘),解釋了心態變化:https://medium.com/@Maokai/compile-the-front-end-from-gulp-to-webpack-c45671ad87fe

雖然我們的過渡需要一些時間,但我們想出瞭如何將我們在Gulp中完成的所有工作移至Webpack。所以對我們來說,我們在Gulp做的所有事情,我們也可以通過Webpack做,但不是相反。