webpack是近期最火的一款模块加载器兼打包工具,它能把各类资源,例如JS(含JSX)、coffee、样式(含less/sass)、图片等都做为模块来使用和处理。css
全局安装webpack和webpack-dev-serverhtml
咱们常规直接使用 npm 的形式来安装:前端
$ npm install webpack -gvue
固然若是常规项目仍是把依赖写入 package.json 包去更人性化:node
npm init 建立一个 package.json 文件
npm install webpack --save-dev 在当前目录下安装局域的 webpackreact
完成以上两个步骤后,咱们的项目下有一个 package.json 文件,一个 node_modules 文件夹,咱们还须要一个 index.html 文件jquery
假如我要把webpack安装到myapp这个文件夹下,就要输入一下命令webpack
cd myapp #进入myapp文件夹
npm init #建立package.json文件,这个文件记录了一些项目的名称版本和一些依赖
npm install webpack --save-dev #安装 webpack 依赖到本地项目中
安装成后package.json文件打开应该是相似这个结构,就说明安装成功了git
{ "name": "first-demo", "version": "1.0.0", "description": "this is my first-demo", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "guowenfh", "license": "MIT", "dependencies": {}, "devDependencies": { "webpack": "^1.12.14" } }
安装webpack开发工具,简单来讲,webpack-dev-server就是一个小型的静态文件服务器。使用它,能够为webpack打包生成的资源文件提供Web服务。github
npm install webpack-dev-server --save-dev #安装webpack-dev-server到本地项目
安装完webpack-dev-server后在命令行执行 webpack-dev-server 而后打开浏览器http://localhost:8080/ 就能够看到效果了。修改代码后直接刷新浏览器就能够看到效果
若是想改完代码自动刷新执行webpack-dev-server –inline 命令就能够实现自动刷新
webpack-dev-server --inline #实现自动刷新
webpack经常使用的一些命令,你们应该了解下
webpack # 执行一次开发的编译 webpack -p #来针对发布环境编译(压缩代码) webpack --watch #来进行开发过程持续的增量编译(飞快地!) webpack -d – to #来生成 SourceMaps webpack --colors #显示静态资源的颜色
每一个项目下都必须配置有一个 webpack.config.js ,它的做用如同常规的 gulpfile.js/Gruntfile.js ,就是一个配置项,告诉 webpack 它须要作什么。在根目录新建一个 webpack.config.js 文
1)、 entry 是页面入口文件配置,output 是对应输出项配置(即入口文件最终要生成什么名字的文件、存放到哪里),其语法大体为:
module.exports={ entry: { page1: "./page1", //支持数组形式,将加载数组中的全部模块,但以最后一个模块做为输出 page2: ["./entry1", "./entry2"] }, output: { path: "dist/js/page", filename: "[name].bundle.js" } }
该段代码最终会生成一个 page1.bundle.js 和 page2.bundle.js,并存放到 ./dist/js/page 文件夹下。
module.exports = { entry: './main.js', //入口文件 output: { filename: 'bundle.js' //打包以后的保存的文件 } };
原文来自:http://618cj.com/2016/07/15/webpack教程/
2)、resolve
指定能够被 import
的文件后缀。好比 Hello.jsx
这样的文件就能够直接用 import Hello from 'Hello'
引用
module.exports={ resolve: { //查找module的话从这里开始查找 root: 'E:/github/flux-example/src', //绝对路径 //自动扩展文件后缀名,意味着咱们require模块能够省略不写后缀名 extensions: ['.js', '.vue', '.json'], alias: { 'vue$': 'vue/dist/vue.esm.js', '@': resolve('src'), AppStore : 'js/stores/AppStores.js',//后续直接 require('AppStore') 便可 //'jquery': path.resolve(__dirname, '../src/assets/jQuery-2.1.4.min') //'bootstrap': path.resolve(__dirname, './static/js/bootstrap.min') } }, }
3)、module.loaders 是最关键的一块配置。它告知 webpack 每一种文件都须要使用什么加载器来处理:
module.exports={ module: { //加载器配置 loaders: [ //.css 文件使用 style-loader 和 css-loader 来处理 { test: /\.css$/, loader: 'style-loader!css-loader' }, //.js 文件使用 jsx-loader 来编译处理 { test: /\.js$/, loader: 'jsx-loader?harmony' }, //.scss 文件使用 style-loader、css-loader 和 sass-loader 来编译处理 { test: /\.scss$/, loader: 'style!css!sass?sourceMap'}, //图片文件使用 url-loader 来处理,小于8kb的直接转为base64 { test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192'} ] } }
如上,"-loader"实际上是能够省略不写的,多个loader之间用“!”链接起来。
注意全部的加载器都须要经过 npm 来加载,并建议查阅它们对应的 readme 来看看如何使用。
拿最后一个 url-loader 来讲,它会将样式中引用到的图片转为模块来处理,使用该加载器须要先进行安装:
npm install url-loader -save-dev
配置信息的参数“?limit=8192”表示将全部小于8kb的图片都转为base64形式(其实应该说超过8kb的才使用 url-loader 来映射到文件,不然转为data url形式)。
webpack.config.js配置
var webpack =require("webpack"); module.exports = { devtool:"source-map", entry: { index:__dirname + "/src/index.js" }, //已屡次说起的惟一入口文件 output: { path: __dirname + "/dist", //打包后的文件存放的地方 filename: "[name].bundle.js",//打包后输出文件的文件名 publicPath:"/dist/" //webpack output is served from }, devServer: { inline:true, contentBase: "./", //content not from webpack is serverd port: '8088', historyApiFallback: true, //配置服务器 proxy:{ '/v4/api/*': { target: 'http://m.maizuo.com', host: 'm.maizuo.com', changeOrigin:true } } /* 在前端 发起 /v4/api/billboard/home请求 转发到 http://m.maizuo.com/v4/api/billboard/home */ }, module:{ loaders:[ { test: /\.css$/, loader: 'style-loader!css-loader'//添加对样式表的处理,内联样式 }, { test:/\.js$/, //随便起的test 名字 exclude: /node_modules/, //排除一个 // exclude: /(node_modules|src)/, //*****排除多个怎么写??? loader:'babel-loader', query:{ presets:['es2015','react'] } }, { test: /\.scss$/, loader:'style-loader!css-loader!sass-loader' }, { test: /\.(eot|svg|ttf|woff|woff2)(\?\S*)?$/, loader: 'file-loader', options: { name: 'fonts/[name].[ext]?[hash]' //目标文件夹 } }, //添加对字体文件的支持。 { test: /\.(png|jpg|gif|svg)$/, loader: 'file-loader', options: { name: 'img/[name].[ext]' } //(1)将代码中依赖的图片资源复制到目标文件夹img/文件夹下面 //(2)自动更新静态url地址(根据publicPath)。 } ] }, plugins:[ // new webpack.optimize.UglifyJsPlugin({ // output: { // comments: false, // 移除全部的注释 // }, // compress: { // warnings: false // } // }) ] }
webpack模块参数详细说明:https://www.mmxiaowu.com/article/58482332d4352863efb55465
webpack.config.js 配置举例 http://ant-tool.github.io/webpack-config.html