转载请注明预见才能遇见的博客:http://my.csdn.net/
原文地址:http://blog.csdn.net/pcaxb/article/details/53515234
WebPack安装-使用-Loader-配置-插件-环境-排错详解(上)http://blog.csdn.net/pcaxb/article/details/53390151详细介绍WebPack的安装-使用-Loader,WebPack安装-使用-Loader-配置-插件-环境-排错详解(中)http://blog.csdn.net/pcaxb/article/details/53393997详细介绍配置-插件-环境-排错,WebPack安装-使用-Loader-配置-插件-环境-排错详解(下)http://blog.csdn.net/pcaxb/article/details/53466261详细介绍WebPack的配置和加载器,涉及到使用过程中的一些细节和技巧,WebPack安装-使用-Loader-配置-插件-环境-排错详解(下扩展)http://blog.csdn.net/pcaxb/article/details/53515234详细介绍WebPack的插件、命令和package的配置, 涉及到Webpack打包性能优化和使用技巧,适合比较了解WebPack的同学学习。
package.json(包括更多的webpack命令)
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题。NPM可以从服务器下载别人编写的第三方包或命令行程序到本地使用,也可以将自己编写的包或命令行程序上传到服务器供别人使用。使用npm init命令可以自动创建这个package.json文件,输入这个命令后,终端会问你一系列诸如项目名称,项目描述,作者等信息,不过不用担心,如果你不准备在npm中发布你的模块,这些问题的答案都不重要,回车默认即可。
如果package.json格式错误,打包时会报 ERROR in Entry module not found: Error: Cannot resolve 'file' or 'directory'让人很摸不着头脑,添加参数--display-error-details 才知道是package.json解析错误。npm的start是一个特殊的脚本名称,它的特殊性表现在,在命令行中使用npm start就可以执行相关命令,如果对应的此脚本名称不是start,想要在命令行中运行时,需要这样用npm run {script name}如npm run build。
package.json文件内部就是一个JSON对象,该对象的每一个成员就是当前项目的一项设置。
下面是一个更完整的package.json文件:
{
"name": "项目名称",
"version": "1.0.0",
"description": "项目描述",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
//项目命令行缩写
},
"keywords": ["node.js","javascript"],
"author": "作者信息",
"license": "ISC",
"dependencies": {
"webpack": "^1.13.3"
},
"devDependencies": {
"webpack-dev-server": "^1.16.2"
}
}
package.json文件的部分字段的含义如下:var webpack = require('webpack');//声明webpack
配置插件
plugins: [
new webpack.BannerPlugin("这里写版权声明和作者信息等。")//在这个数组中new一个就可以
]
说明:这个插件可以让你打包出来的文件,不管是js还是css都能带上你的版权申明和作者信息等var webpack = require('webpack');//声明webpack
配置插件
new webpack.optimize.UglifyJsPlugin({
output: {
// remove all comments(注释)
comments: false
},
compress: {
//不显示警告
warnings: false
},
mangle: {
//mangle 通过设置except数组来防止指定变量被改变 (防止指定变量被混淆)
except: ['$super', '$', 'exports', 'require']
}
})
说明:UglifyJsPlugin还可以设置更多的选项来满足个性化需求,默认情况下没有配置UglifyJsPlugin插件的时候,使用webpack -p默认使用这个插件,但是会报警告,所以按照需求配置。UglifyJsPlugin它既可以压缩js代码也可以压缩css代码,其实并不能说是在压缩css代码,本质来说还是压缩js代码,再将这块代码输出到css文件中。var webpack = require('webpack');//声明webpack
配置插件
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify(process.env.NODE_ENV),
},
})
说明:这时候打包的时候命令要带上node的环境设置NODE_ENV=production,原来的命令接到后面,类似如下命令NODE_ENV=production webpack --progress --colors --config webpack.product.config.js
更多配置资料:点击打开链接
(4)实现分离css的插件
安装extract-text-webpack-plugin命令:
npm install extract-text-webpack-plugin --save-dev
申明ExtractTextPlugin插件:var ExtractTextPlugin = require("extract-text-webpack-plugin");
配置插件{
test:/\.css$/,
// loader:'style-loader!css-loader'
loader:ExtractTextPlugin.extract("style-loader","css-loader")
},
{
test:/\.(scss|sass)$/,
//loader:'style-loader!css-loader!sass-loader'
loader:ExtractTextPlugin.extract("style-loader", "css-loader!sass-loader")
},
{
test:/\.less$/,
//loader:'style-loader!css-loader!less-loader'
loader:ExtractTextPlugin.extract("style-loader", "css-loader!less-loader")
}
说明:less和scss和css你可以按照你自己的需求配置plugins:[
new ExtractTextPlugin("entry.bundle.css")
]
CSS分理成多个CSS文件资料:点击打开链接{
test: /\.(png|PNG|jpg|JPG|jpeg|JPEG|gif|GIF)$/,
loader: 'url-loader?limit=8192&name=img/[hash].[ext]'
}
默认limit这里是8192字节,超过默认的图片打包到文件夹中,没有超过默认的图片打包到bundle中,修改limit=1,把所有的图片都打包到文件夹中。limit越小打包到文件夹中的图片越多网络请求越多包体积小,limit越大打包到文件夹中的图片越少包体积大,所以大家可以根据具体情况配置limit的大小。var webpack = require('webpack');//声明webpack
配置插件
entry:
{
//和前面博客(WebPack安装-使用-Loader-配置-插件-环境-排错详解)中
//说的多输入多输出类似,将业务代码和第三方库分离
//业务代码
bundle:__dirname+'/app/entry.js',
//第三方库
//根据自己的需求修改
//比如//vendor: ["react","react-dom","react-router","@fdaciuk/ajax"]
vendor: ["react","react-dom"]
},
output:
{
path:__dirname+'/build',
filename:'[name].[chunkhash:24].js'
},
plugins:[
//将第三方库打包到vendor.chunkhash.js
//这里的name是配置文件里面入口文件entry的键名
//关于name不同的解释参考http://www.cnblogs.com/liuyt/p/5810042.html
new webpack.optimize.CommonsChunkPlugin({ name: 'vendor' }),
]
hash和chunkhash的区别资料:点击打开链接var webpack = require('webpack');//声明webpack
配置插件
new webpack.optimize.DedupePlugin()
说明:有些JS库有自己的依赖树,并且这些库可能有交叉的依赖,DedupePlugin可以找出他们并删除重复的依赖,减少包的体积。npm install html-webpack-plugin --save-dev
申明html-webpack-plugin插件:var HtmlWebpackPlugin = require('html-webpack-plugin');
配置插件new HtmlWebpackPlugin({
title: 'WebPack插件研究',//设置title的名字
filename: 'index.html',//设置这个html的文件名
template: './common.html', // Load a custom template
inject: 'body', // Inject all scripts into the body
hash:true,//是否hash化 true|false
cache:true//是否缓存
})
如果配置模板template的话,可以直接使用以下方式配置new HtmlWebpackPlugin({
filename: 'index.html',//设置这个html的文件名
template: './common.html', // Load a custom template
inject: 'body', // Inject all scripts into the body
})//默认带缓存,hash值可以到output的时候配置
说明:如果使用了模板,这里的title是没有效果的,可以在模板中定义title。模板随便放到哪个位置,和entry类似的方式配置路径。更多的配置参考资料: 点击打开链接
WebPack安装-使用-Loader-配置-插件-环境-排错详解(下扩展)详细介绍WebPack的插件、命令和package的配置, 涉及到Webpack打包性能优化和使用技巧,适合比较了解WebPack的同学学习。WebPack差不多就介绍到这里,后面还有很多东西需要去优化和了解,WebPack深入的配置和好用的插件还是很多的。
WebPack安装-使用-Loader-配置-插件-环境-排错详解(上)
博客地址:http://blog.csdn.net/pcaxb/article/details/53390151
下载地址:http://download.csdn.net/detail/pcaxb/9696873
WebPack安装-使用-Loader-配置-插件-环境-排错详解(中)
博客地址:http://blog.csdn.net/pcaxb/article/details/53393997
下载地址:http://download.csdn.net/detail/pcaxb/9697579
WebPack安装-使用-Loader-配置-插件-环境-排错详解(下)
博客地址:http://blog.csdn.net/pcaxb/article/details/53466261
下载地址:http://download.csdn.net/detail/pcaxb/9702314
WebPack安装-使用-Loader-配置-插件-环境-排错详解(下扩展)
博客地址:http://blog.csdn.net/pcaxb/article/details/53515234
下载地址:http://download.csdn.net/detail/pcaxb/9705351