基于webpack的前端工程化开发解决方案探索:

一、代码压缩

A. 压缩HTML

//根据模板插入css/js等生成最终HTML
new HtmlWebpackPlugin({
favicon:'./src/img/favicon.ico', //favicon路径
filename:'/view/index.html', //生成的html存放路径,相对于 path
template:'./src/view/index.html', //html模板路径
inject:true, //允许插件修改哪些内容,包括head与body
hash:true, //为静态资源生成hash值
minify:{ //压缩HTML文件
removeComments:true, //移除HTML中的注释
collapseWhitespace:true //删除空白符与换行符
}
})

HtmlWebpackPlugin插件在生成HTML调用了 html-minifier 插件来完成对HTML的压缩,这里我们使用两个配置完成来移除HTML中的注释以及空白符达到压缩的效果,其他的具体的配置参数大家请参考 html-minifier API
B. 压缩JS与CSS
new webpack.optimize.UglifyJsPlugin({ //压缩代码
compress: {
warnings: false
},
except: ['$super', '$', 'exports', 'require'] //排除关键字
})

webpack已经内嵌了uglifyJS来完成对JS与CSS的压缩混淆,无需引用额外的插件。
这里需要注意的是压缩的时候需要排除一些关键字,不能混淆,比如$或者require,如果混淆的话就会影响到代码的正常运行。
修改完 webpack配置后,我们就可以运行webpack命令来重新打包了。
这次可以看到dist下输出的Js/css/html都是压缩过的。

二、webpack-dev-server

webpack开发服务器,是webpack官方提供的一个辅助开发工具,它可以自动监控项目下的文件,一旦有修改保存操作,开发服务器就会自动运行webpack 打包命令,帮我们自动将开发的代码重新打包。而且,如果需要的话,还能自动刷新浏览器,重新加载资源。
  Cool!一般前端开发人员都会有两台显示器,一台用于编辑代码,一台用于打开浏览器查看效果。如果配置上webpack-dev-server的话,我们只需要在保存修改后的代码,什么也不用做,webpack就能自动帮我们打包代码,同时自动刷新浏览器,让我们立马看到修改后的效果。

最后,webpack常用的基本配置

var path=require('path');

var webpack = require('webpack');

var ExtractTextPlugin = require("extract-text-webpack-plugin");

var HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports={

entry:{

index:"./src/js/page/index.js",

},

output:{

path: path.join(__dirname,'dist'),

publicPath: "/webpack/dist/",

filename: "js/[name].js",

chunkFilename: "js/[id].chunk.js"

},

module: {

loaders: [ //加载器

{test: /.css$/, loader:ExtractTextPlugin.extract("style", "css") },

{test: /.html$/, loader: "html" },

{test: /.(png|jpg)$/, loader: 'url-loader?limit=8192&name=./img/[hash].[ext]'}

]

},

plugins:[

new webpack.ProvidePlugin({ //加载jq

$: 'jquery'

}),

new ExtractTextPlugin("css/[name].css"), //单独使用style标签加载css并设置其路径

new webpack.optimize.UglifyJsPlugin({ //压缩代码

compress: {

warnings: false

},

except: ['$super', '$', 'exports', 'require'] //排除关键字

}),

new HtmlWebpackPlugin({ //根据模板插入css/js等生成最终HTML

favicon:'./src/img/favicon.ico', //favicon路径

filename:'/view/index.html', //生成的html存放路径,相对于 path

template:'./src/view/index.html', //html模板路径

inject:true, //允许插件修改哪些内容,包括head与body

hash:true, //为静态资源生成hash值

minify:{ //压缩HTML文件

removeComments:true, //移除HTML中的注释

collapseWhitespace:true //删除空白符与换行符

}

})

],

devServer:{

contentBase:'./dist/view'

}

};

你可能感兴趣的:(基于webpack的前端工程化开发解决方案探索:)