前端模塊化開發篇之grunt&webpack篇


  幾個月前寫了一篇有關gulp和browserify來做前端構建的博客,因為browserify用來做js的打包時可能有些麻煩(特別是在寫React的時候),所以這里再強烈推薦一款js打包工具-webpack。webpack很強大,不光可以模塊化加載js,甚至還有jsx,css,圖片等等。可以看看webpack托管到github的官網,相信你看一眼就能懂webpack的強大之處了。進入webpack官網>>

  = =說到此處,不免有些尷尬,由於博主的英文so 一般,對webpack的認識還不夠深,這里僅僅只做一個大概的講解。同樣的,我也沒有在webpack社區中找到有關css壓縮的插件,所以只能用grunt來做有關css的打包,但grunt與webpack並不沖突而且grunt的社區非常成熟,只要是你能想到的插件在grunt官方都是有滴(並不代表我都用過~)。

  好,進入正題。因為我們用到webpack,所以我們還是用react框架來配合這次演示,當然我們css是用grunt來進行合並壓縮的。在編寫代碼前,我們需要安裝npm,grunt以及webpack。這里我就不再多說了,大家可以移步到npm的官網,上面可以找到具體的安裝細節。npm社區>>

  第一步先建立一個工作目錄,2016-3-5。然后我們使用npm init (或者 cnpm init)進行項目的初始化。

    

  第二步就可以開始編寫js和css文件了。由於我們用的是React框架,因此我們采用jsx語法來書寫,文件當然也得保存為.jsx的格式,我們直接引用facebook官方給出的一個小demo(好吧,其實是博主懶得自己寫了...),保存為LikeButton.jsx,然后再編寫兩個css文件,用來模擬合並和壓縮,分別保存為LikeButton1.css和LikeButton2.css。代碼如下:

  LikeButton.jsx:

 1 var React = require('react');
 2 var ReactDOM = require('react-dom');
 3 
 4 var LinkButton = React.createClass({
 5     getInitialState: function() {
 6         return {
 7             liked: false
 8         };
 9     },
10     handleClick: function(event) {
11         this.setState({
12             liked: !this.state.liked
13         });
14     },
15     render: function() {
16         var text = this.state.liked ? 'like' : 'haven\'t liked';
17         return(
18             <p onClick={this.handleClick}>
19                 You{text} this. Click to toggle.
20             </p>
21         );
22     }
23 });
24 
25 ReactDOM.render(<LinkButton/>,document.body);
View Code

  LikeButton1.css:

1 *{
2     margin: 0px;
3     padding: 0px;
4 }
View Code

  LikeButton2.css:

1 p{
2     width: 500px;
3     background-color: #000;
4     color: #fff; 
5 }
View Code

  哈哈,為了演示grunt,我也蠻拼的寫了兩個這么簡短的css。接下來我們開始配置grunt和webpack的任務。

  grunt的任務需要在根目錄下編寫一個名叫Gruntfile.js的文件,而webpack則需要在根目錄下編寫一個名叫webpack.config.js的文件。先列出代碼,再來進行詳細講解。

  Gruntfile.js:

 1 module.exports = function(grunt) {
 2 
 3     grunt.initConfig({
 4         pkg: grunt.file.readJSON('package.json'),
 5         cssmin: {
 6             options: {
 7                 shorthandCompacting: false,
 8                 roundingPrecision: -1
 9             },
10             target: {
11                 files: {
12                     './LikeButton.min.css': [
13                         './LikeButton1.css',
14                         './LikeButton2.css'
15                     ]
16                 }
17             }
18         }
19     });
20 
21     grunt.loadNpmTasks('grunt-contrib-cssmin');
22 
23     grunt.registerTask('default',['cssmin']);
24 }
View Code

  grunt的配置分三步,第一步是配置任務,即grunt.initConfig({});第二步是加載任務插件;第三步注冊可執行的任務命令。

  一般第一步是需要自己手動配置的,grunt有很多很多的插件,而今天介紹的css壓縮合並只用到了grunt-contrib-cssmin的插件。首先看到pkg:grunt.file.readJSON('package.json')這行,有時候我們需要將一些grunt任務基本信息放在package.json中,就需要將這個文件轉換為一個js對象,然后可以用來在這個文件中進行調用。接下來就是一個key: value的形式會一直出現,代表任務名:任務的進本信息。比方說這個cssmin就是grunt的任務名,等會我要壓縮合並文件時就只需在控制台輸入grunt cssmin。

  任務內部應該怎么寫?這個由於插件的大不相同可能寫法也不同,推薦大家去github或者是npm社區去看官方文檔的寫法。grunt-contrib-cssmin官方文檔>>。

  第二步的加載插件,只需要grunt.loadNpmTasks('插件名')即可,記得要npm 這個插件哦。

  第三步的任務注冊,grunt.registerTask('default',['cssmin'])。數組寫上所有你在第一步構建的方法,而default則可以把所有的方法一鍵完成,在命令行只需輸入grunt,則所有任務自行執行完畢。

  

  接下來看看我們的文件LikeButton.min.css:

  

 

  我們的Grunt出色的完成它的任務~哈哈,雖然只是兩個文件,但是當你面對n個文件時,並且進行性能提升,Grunt會成為你很好的幫手。而React的出現,又使Webpack這款工具徹徹底底的火了!

  我來說說我為什么要使用webpack把,之前我是使用gulp+browserify來進行構建React的,可是我覺得真的好難配置,特別是前端到了越來越注重模塊化開發的時代,什么圖片,css都要這樣,所以webpack便成為最好的選擇。廢話不多說,直接進入webpack.config.js的配置!

  webpack.config.js:

 1 var webpack = require('webpack');
 2 
 3 module.exports = {
 4     entry: {
 5         LikeButton: './LikeButton.jsx'
 6     },
 7     output: {
 8         path: './',
 9         filename: '[name].js'
10     },
11     module: {
12         loaders: [
13             {
14                 test: /\.jsx$/,
15                 loader: 'jsx-loader'
16             }
17         ]
18     }
19 }
View Code

  對於webpack的配置,其實更通俗易懂。entry,作為入口點,用key-value的格式標明了在webpack任務中這個文件的一個引用。后面的output對象,需要指明路徑path以及輸出文件名filename,其中的[name]就是entry中的key。而module中的Loaders數組就是我們用到的webpack插件,這里是一個jsx轉換器"jsx-loader",我們用正則找到所有jsx結尾的文件來進行轉換。

  整個webpack的配置很簡單,但是webpack功能不止如此,博主也在學習中,可以參考webpack在github上的文檔>>.

  

  執行完webpack后控制台會有一些信息的輸出,這個時候你的jsx文件已經打包為js文件了,不過...這個文件確實是有點大,因為里面包含了整個react的框架,但是當多個jsx或者js打包時我們可以創建一個common的js來提取公共部分。

  webpack和grunt大大提升了開發效率,所以在這里強力推薦~

  

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM