终于学习了一下webpack
webpack 是前端的一个项目构建工具,它是基于Node.js开发出来的一个前端工具。WebPack能够看作是模块打包机(bundler),经过分析项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其打包为合适的格式以供浏览器使用。javascript
Gulp/Grunt是基于task任务的一种可以优化前端的开发流程的工具,而WebPack是一种模块化的解决方案,是基于整个项目进行构建的。Gulp/Grunt在一个配置文件中,指明对某些文件进行相似编译,组合,压缩等任务的具体步骤,工具以后能够自动替你完成这些任务。如图:
而webpack把你的项目当作一个总体,经过一个给定的主文件(如:index.js),Webpack将从这个文件开始找到你的项目的全部依赖文件,使用loaders处理它们,最后打包为一个(或多个)浏览器可识别的JavaScript文件。如图:
Webpack的优势使得Webpack在不少场景下能够替代Gulp/Grunt类的工具。css
webpack自己只能加载js/json模块,若是要加载其它类型的文件/模块, 就须要使用对应的loader进行转化和加载。
loader能够将全部类型的文件转换为webpack 可以处理的有效模块,而后你就能够利用 webpack 的打包能力,对它们进行处理。
loader通常以 xxx-loader 的方式命名,xxx表明了这个loader要作的转化功能,好比:css-loader,json-loader等。html
全局安装:npm i webpack -g
项目依赖:npm i webpack --save-dev
前端
webpack01.htmljava
<body> <div id="test"> 哈哈哈 </div> <script type="text/javascript" src="js/test.js"></script> </body>
test.jsjquery
import $ from 'jquery'; import '../css/common.css'; $(function () { $('#test').addClass("test"); });
经过命令打包:webpack
webpack js/test.js --output dist/bundle.js --mode development
打包完成后项目下多出dist文件夹,把webpack01.html拷贝进去,在页面上访问,能够出现相同效果
webpack把全部依赖打包成一个bundle.js文件,经过代码分割成单元片断并按需加载。关于webpack打包原理学习于:https://blog.csdn.net/baozhiq...web
除了以上经过命令来打包,还能够经过配置文件配置webpack的入口文件等等信息,在终端直接执行webpack便可打包。
webpack.config.js正则表达式
const path = require('path'); module.exports = { mode: 'production', // 入口文件配置 entry: './js/test.js', // 输出配置 output: { // 出口文件 filename: 'bundle.js', // 设置全路径 path: path.resolve(__dirname, 'dist') }, module: { // 规则数组, 里面的每个对象都是在描述一个loader rules: [ { //css文件加载,正则表达式css文件的路径 test: /\.css$/, use: [ 'style-loader', 'css-loader' ] }, { ////图片文件加载 test: /\.(png|jpg|gif)$/, use: [ { loader: 'file-loader', query: { name: 'img/[name]-[hash:5].[ext]' } }, ], }, ] }, devServer:{ contentBase: './dist' } };
关于配置文件详解来自于:https://blog.csdn.net/qq_3977...npm
webpack打包css文件须要添加style-loader和css-loader模块:npm install css-loader style-loader --save-dev
(或者经过配置文件引入)
css-loader让咱们能使用相似@import和url(...)的方法实现require()的功能,style-loader将全部的计算后的样式加入页面中,两者组合在一块儿可以把样式表嵌入webpack打包后的JS文件中。关于测试代码,上面示例已展现。
插件(Plugins)是用来拓展Webpack功能的,它们会在整个构建过程当中生效,执行相关的任务。
该插件依据一个简单的模板,帮你生成最终的Html5文件,这个文件中自动引用了你打包后的JS文件。
经过`npm install --save-dev html-webpack-plugin
命令安装。
webpack.config.js的配置:
使用:删除掉原先打包编译生成的dist文件夹,从新执行webpack,该插件会自动根据指定的模板页面帮助咱们建立index.html文件,并作好相关配置引入。
webpack-dev-server提供了一个简单的web服务器,而且可以实时从新加载(live reloading)。
经过npm install --save-dev webpack-dev-server
命令安装。
webpack.config.js的配置:
编译打包:
package.json中
"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "webpack-dev-server --open", "build": "babel js --out-dir lib" }
终端执行npm start
便可。