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'
}
}
};