webpack使用

webpack 
优势:1.以commonJS形式书写脚本,支持AMD/CMD
2.能被模块化的不仅仅是 JS 
3.开发便捷打包、压缩混淆、图片转base64


0.全局安装(err:webpack不是内部指令)
	npm install -g webpack
1.cd 
2.初始化(生成 package.json) npm init
3.安装到你的项目目录
	npm install --save-dev webpack
4.打包  webpack hello.js ./build/hello.build.js
5.引用其他文件 require(文件地址)
	*不支持css文件 需要css-loader style-loader
	npm install css-loader style-loader --save-dev
	*能够处理css文件(给css指定loader css-loader!) require('css-loader!./style.css')
	*使style生效(style-loader!) require('style-loader!css-loader!./style.css')
	*require('style-loader!css-loader!./style.css')转require('./style.css')
	--moudule-bind单引号会报错
	webpack hello.js ./build/hello.build.js --module-bind "css=style-loader!css-loader" --watch
	实时更新  --watch
	打包过程  --progress
	打包模块  --display-modules
	打包逻辑原因  --display-reasons

配置文件:webpack.config.js
执行	webpack
1.指定webpack配置文件 (--config)
	webpack --config webpack.dev.config.js


2.err:不是绝对路径解决方案
	* “__dirname” 是node.js中的一个全局变量,它指向当前执行脚本所在的目录。
	* var path = require('path') 
	

	var path = require('path')
	module.exports = {
		/*页面入口文件配置*/
		entry: __dirname + '/src/script/main.js',
		entry: path.resolve(__dirname,'src/script/main.js')
		/*入口文件输出位置*/
		output: {
			path: __dirname + '/dist/js',
			filename: 'bundle.js'
		}
	}

3.webpack在命令行使用的参数添加 (因事直接执行 webpack) 
	*修改package.json, scripts(可输入命令),
	'scripts':{
		'webpack': 'webpack --config webpack.config.js --progress --display-modules --colors --display-reasons'
	}
	// webpack 指定  文件 打包过程 打包模块 字体彩色 打包原因
	
	*执行 webpack => npm run webpack

4.entry 三种方式 
	*__dirname + str
	*[__dirname + .js,__dirname + .js]
	=>filename : '输出.js'
	*
		{
			main: __dirname + .js
			a: __dirname + .js
		}
	=> filename : '[name]-[hash].js'
	=> filename : '[name]-[chunkhash].js'
	hash 值不变  chunkhash 是否修改文件 如果修改 hash改变

自动生成在项目中的html页面上
 	
5.	* 当引用 [chunkhash].js 文件名不确定时(打包后把js自动插入到html文件中)
  npm install html-webpack-plugin --save-dev
  .config.js 引用
	var htmlWebpackPlugin= require('html-webpack-plugin')
	{
		plugins: [
			new htmlWebpackPlugin({
				filename: 'index-[hash].html', /*生成目名称*/
				template: 'index.html',
				inject: 'head', /* 放在head||body里 */ 
				date: new Date(),
			})
		]
	}
6. 参数调用
	.html 调用  <%= htmlWebpackPlugin.date %>
	打包后的js <%= htmlWebpackPlugin.options.chunks.main.entry %>
7. publicPath 替换本地路径
output:{
	publicPath: 'http://cdn.com/' /*上线需求*/
}

8. 自动生成在项目中的多个html页面上
{
		plugins: [
			new htmlWebpackPlugin({
				chunks:['main']    选择
				excludeChunks:['main'] 排除
			}),
			new htmlWebpackPlugin({})
		]
	}
	

js loader
cnpm install --save-dev babel-loader babel-core
cnpm install --save-dev babel-preset-latest

css
后处理(flex 兼容) cnpm install --save-dev postcss-loader
浏览器前缀 cnpm install --save-dev autoprefixer

less
cnpm install --save-dev less
cnpm install --save-dev less-loader

sass
cnpm install --save-dev sass
cnpm install --save-dev sass-loader

html
cnpm install --save-dev html-loader


img
cnpm install --save-dev file-loader

cnpm install --save-dev url-loader
如果打包的图片或是文件 大于limit值 会丢给file处理 小于 把图片或是文件专程base64编码 不再是URL 而是一段编码

处理项目中引入的文件
1.base64编码
2.url的方式 http请求
	浏览器使用http请求优势:载入图片 使浏览器图片缓存
	

cnpm install --save-dev image-webpack-loader

实例:
module.exports = {
    //插件项
    plugins: [commonsPlugin],
    //页面入口文件配置
    entry: {
        index : './src/js/page/index.js'
    },
    //入口文件输出配置
    output: {
        path: 'dist/js/page',
        filename: '[name].js'
    },
    module: {
        //加载器配置
        loaders: [
            { test: /.css$/, loader: 'style-loader!css-loader' },
            { test: /.js$/, loader: 'jsx-loader?harmony' },
            { test: /.scss$/, loader: 'style!css!sass?sourceMap'},
            { test: /.(png|jpg)$/, loader: 'url-loader?limit=8192'}
        ]
    },
    //其它解决方案配置
    resolve: {
        root: 'E:/github/flux-example/src', //绝对路径
        extensions: ['', '.js', '.json', '.scss'],
        alias: {
            AppStore : 'js/stores/AppStores.js',
            ActionType : 'js/actions/ActionType.js',
            AppAction : 'js/actions/AppAction.js'
        }
    }
};
原文地址:https://www.cnblogs.com/liujian9527/p/6744229.html