webpack常用配置

安装

npm i -g webpack
默认版本3.5.5

单纯打包js模块(最简单的使用)

目录结构:

进入main.js目录,命令行执行:

main.js:

let a =require('./a.js')
document.getElementById('root').appendChild(a());

import b from './b.js'
alert(b.t)

a.js:

//commonJs模块
console.log('a'+new Date().getTime());
module.exports=function(){
	console.log(new Date().getTime());
	var div =document.createElement('div');
	div.innerHTML='from a';
	return div
}

b.js:

//es6模块
console.log('b'+new Date().getTime());
export default {
	t:'from b'
}

html:

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>demo1</title>
  </head>
  <body>

    <div id='root'>
    </div>
    <script src="bundle.js"></script>
  </body>
</html>

wepack.config.js配置文件配置wepack

其他文件不动,根目录下新建webpack.config.js 如下:

配置文件的关键点:入口以及出口。

module.exports = {
	entry: __dirname + "/app/main.js", //唯一入口文件
	output: {
		path: __dirname + "/public", //打包后的文件存放的地方
		filename: "bundle.js" //打包后输出文件的文件名
	}
}

根目录下运行:

省去命令行中复杂的配置,webpack命令直接去读取webpack.config.js的配置,然后进行打包。

package.json配置script

目录结构

新增:

npm run start 即为直接命令行输入webpack

代码压缩混淆

在webpack包里面已经自带这个UglifyJsPlugin,我们只要在webpack中的plugins添加即可,代码如下:

var webpack = require('webpack');
var uglifyJsPlugin = webpack.optimize.UglifyJsPlugin;
module.exports = {
	entry: __dirname + "/app/main.js", //唯一入口文件
	output: {
		path: __dirname + "/public", //打包后的文件存放的地方
		filename: "bundle.js" //打包后输出文件的文件名
	},
	plugins: [
		new uglifyJsPlugin({
			compress: {
				warnings: false
			},
            mangle:{
                except:['$super','$','exports','require']
//              UglifyJsPlugin可以防止$super, $, exports , require,不会被混淆,设置warnings:false就打包时候即可消除warings报警了
            }
		})
	]
}


以上报错出现在使用common.js模块标准的a.js中,当将其改成es6模块写法后,可以正常打包压缩,猜想UglifyJsPlugin不支持common.js的语法。
以上是具体的配置UglifyJsPlugin的方法,其实webpack本身集成了UglifyJS插件(webpack.optimize.UglifyJsPlugin),其命令webpack -p即表示调用UglifyJS来压缩代码。
即:

配置server

npm install webpack-dev-server

直接运行默认端口8080;即可访问http://localhost:8080/public/index.html

watch代码,代码改变无需再次打包

多入口配置

module.exports = {
	entry:  {
	    bundle1: './app/main1.js',//多入口配置
	    bundle2: './app/main2.js'
	  },
	output: {
		path: __dirname + "/public", //打包后的文件存放的地方
		filename: "[name].js" //打包后输出文件的文件名
	}
}

CSS-loader

新建css文件后目录;

main.js引入css

require('./css.css');

webpack.config.js配置

module.exports = {
	entry: __dirname + "/app/main.js", //唯一入口文件
	output: {
		path: __dirname + "/public", //打包后的文件存放的地方
		filename: "bundle.js" //打包后输出文件的文件名
	},
	module: {
		loaders: [{
			test: /\.css$/,
			loader: 'style-loader!css-loader'
		}, ]
	}
}

注意style-loader在css-loader之前不能修改,css-loader依赖于style-loader的输出;style-loader用于在页面插入style标签,css-loader用来解析css

Image loader

main.js引入图片

var img1 = document.createElement("img");
img1.src = require("./small.png");
document.body.appendChild(img1);

var img2 = document.createElement("img");
img2.src = require("./big.png");
document.body.appendChild(img2);

webpack配置:

module.exports = {
	entry: __dirname + "/app/main.js", //唯一入口文件
	output: {
		path: __dirname + "/public", //打包后的文件存放的地方
		filename: "bundle.js" //打包后输出文件的文件名
	},
	module: {
		loaders: [{
			test: /\.(png|jpg)$/,
			loader: 'url-loader?limit=8192' //限制图片大小,小于阈值用base64
		}]
	}
}

注意打包后的页面dom:

全局配置jq(如果非要jq)

var webpack =require('webpack')
module.exports = {
	entry: __dirname + "/app/main.js", //唯一入口文件
	output: {
		path: __dirname + "/public", //打包后的文件存放的地方
		filename: "bundle.js" //打包后输出文件的文件名
	},
	 plugins: [
	    new webpack.ProvidePlugin({
	      $: "jquery",
	      jQuery: "jquery",
	      "window.jQuery": "jquery"
	    })
	 ]
}

库文件单独打包

var webpack = require('webpack')
module.exports = {
	entry: {
		bundle:__dirname + "/app/main.js",
		vendor: ['jquery']
	}, 
	output: {
		path: __dirname + "/public", //打包后的文件存放的地方
		filename: "bundle.js" //打包后输出文件的文件名
	},
	plugins: [
		new webpack.optimize.CommonsChunkPlugin({
			name: "vendor",
			filename: 'vendor.js'
		})
	]
}

注意点:jq还需require,且公共文件vendor需要在bundle.js前引入。

开发阶段解决跨域(注意开发阶段,vue-cli构建后)

目录:

proxyTable字段下添加如下:

接口请求时只需写如下部分:

打包后代码块分析

这里我们使用webpack-bundle-analyzer来分析, Webpack 生成的包体组成并且以可视化的方式反馈给开发者。
npm来安装该插件:

 npm install --save-dev webpack-bundle-analyzer

然后我们需要修改webpack.config.js来引入该插件:

var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
// ...
plugins: [new BundleAnalyzerPlugin()]
// ...

我们可以在 项目的 package.json 文件中注入如下命令,以方便运行她(npm run analyz),默认会打开 http://127.0.0.1:8888 作为展示。

“analyz”: “NODE_ENV=production npm_config_report=true npm run build”

posted @ 2017-08-31 13:21  jeremyli  阅读(620)  评论(0编辑  收藏  举报