WebPack_01-07学习—PPT_第1页
WebPack_01-07学习—PPT_第2页
WebPack_01-07学习—PPT_第3页
WebPack_01-07学习—PPT_第4页
WebPack_01-07学习—PPT_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

什么是WebPack,为什么要使用它?,WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其转换和打包为合适的格式供浏览器使用。现今的很多网页其实可以看做是功能丰富的应用,它们拥有着复杂的JavaScript代码和一大堆依赖包。为了简化开发的复杂度,前端社区涌现出了很多好的实践方法模块化,让我们可以把复杂的程序细化为小的文件;类似于TypeScript这种在JavaScript基础上拓展的开发语言:使我们能够实现目前版本的JavaScript不能直接使用的特性,并且之后还能转换为JavaScript文件使浏览器可以识别;Scss,less等CSS预处理器这些改进确实大大的提高了我们的开发效率,但是利用它们开发的文件往往需要进行额外的处理才能让浏览器识别,而手动处理又是非常繁琐的,这就为WebPack类的工具的出现提供了需求。,1,WebPack和Grunt以及Gulp相比有什么特性,其实Webpack和另外两个并没有太多的可比性,Gulp/Grunt是一种能够优化前端的开发流程的工具,而WebPack是一种模块化的解决方案,不过Webpack的优点使得Webpack在很多场景下可以替代Gulp/Grunt类的工具。Grunt和Gulp的工作方式是:在一个配置文件中,指明对某些文件进行类似编译,组合,压缩等任务的具体步骤,工具之后可以自动替你完成这些任务。,2,Webpack的工作方式,Webpack的工作方式是:把你的项目当做一个整体,通过一个给定的主文件(如:index.js),Webpack将从这个文件开始找到你的项目的所有依赖文件,使用loaders处理它们,最后打包为一个(或多个)浏览器可识别的JavaScript文件。,3,开始使用Webpack,安装(前提是node.js已安装)Webpack可以使用npm安装,新建一个空的练习文件夹(此处命名为webpack-demo),在终端中转到该文件夹后执行下述指令就可以完成安装。首先跳转到该文件夹下cdwebpack-demo/全局安装npminstall-gwebpack/安装到你的项目目录npminstall-save-devwebpack,4,一.正式使用Webpack,/创建文件npminit在上述练习文件夹中创建一个package.json文件,这是一个标准的npm说明文件,里面蕴含了丰富的信息,包括当前项目的依赖模块,自定义的脚本任务等等。在终端中使用npminit命令可以自动创建这个package.json文件输入这个命令后,终端会问你一系列诸如项目名称,项目描述,作者等信息,不过不用担心,如果你不准备在npm中发布你的模块,这些问题的答案都不重要,回车默认即可。package.json文件已经就绪,我们在本项目中安装Webpack作为依赖包/安装Webpacknpminstall-save-devwebpack,5,一.正式使用Webpack,回到之前的空文件夹,并在里面创建两个文件夹,app文件夹和public文件夹,app文件夹用来存放原始数据和我们将写的JavaScript模块,public文件夹用来存放之后供浏览器读取的文件(包括使用webpack打包生成的js文件以及一个index.html文件)。接下来我们再创建三个文件:index.html-放在public文件夹中;Greeter.js-放在app文件夹中;main.js-放在app文件夹中;此时项目结构如下图所示,6,一.正式使用Webpack,app文件夹用来存放原始数据和我们将写的JavaScript模块。public文件夹用来存放之后供浏览器读取的文件(包括使用webpack打包生成的js文件以及一个index.html文件)。,7,一.正式使用Webpack,我们在index.html文件中写入最基础的html代码,它在这里目的在于引入打包后的js文件(这里我们先把之后打包后的js文件命名为bundle.js,之后我们还会详细讲述)。webpack-demo,8,一.正式使用Webpack,我们在Greeter.js中定义一个返回包含问候信息的html元素的函数,并依据CommonJS规范导出这个函数为一个模块:/Greeter.jsmodule.exports=function()vargreet=document.createElement(div);greet.textContent=Hithereandgreetings!;returngreet;,9,一.正式使用Webpack,main.js文件中我们写入下述代码,用以把Greeter模块返回的节点插入页面。/main.jsconstgreeter=require(./Greeter.js);document.querySelector(#root).appendChild(greeter();,10,一.正式使用Webpack,webpack在终端中使用,在基本的使用方法如下:#extryfile出填写入口文件的路径,本文中就是上述main.js的路径,#destinationforbundledfile处填写打包文件的存放路径#填写路径的时候不用添加webpackentryfile-odestinationforbundledfile(全局安装的情况)webpackapp/main.js-opublic/bundle.js指定入口文件后,webpack将自动识别项目所依赖的其它文件,不过需要注意的是如果你的webpack不是全局安装的,那么当你在终端中使用此命令时,需要额外指定其在node_modules中的地址,继续上面的例子,在终端中输入如下命令#webpack非全局安装的情况node_modules/.bin/webpackapp/main.jspublic/bundle.js,11,12,二.通过配置文件来使用Webpack,通过配置文件来使用WebpackWebpack拥有很多其它的比较高级的功能(比如说本文后面会介绍的loaders和plugins),这些功能其实都可以通过命令行模式实现,但是正如前面提到的,这样不太方便且容易出错的,更好的办法是定义一个配置文件,这个配置文件其实也是一个简单的JavaScript模块,我们可以把所有的与打包相关的信息放在里面。,13,二.通过配置文件来使用Webpack,继续上面的例子来说明如何写这个配置文件,在当前练习文件夹的根目录下新建一个名为webpack.config.js的文件,我们在其中写入如下所示的简单配置代码,目前的配置主要涉及到的内容是入口文件路径和打包后文件的存放路径。/webpack.config.jsmodule.exports=entry:_dirname+/app/main.js,/已多次提及的唯一入口文件output:path:_dirname+/public,/打包后的文件存放的地方filename:bundle.js/打包后输出文件的文件名注:“_dirname”是node.js中的一个全局变量,它指向当前执行脚本所在的目录。,14,二.通过配置文件来使用Webpack,有了这个配置之后,再打包文件,只需在终端里运行webpack(非全局安装需使用node_modules/.bin/webpack)命令就可以了,这条命令会自动引用webpack.config.js文件中的配置选项,示例如下:如果我们可以连webpack(非全局安装需使用node_modules/.bin/webpack)这条命令都可以不用呢?,15,三.更快捷的执行打包任务,在命令行中输入命令需要代码类似于node_modules/.bin/webpack这样的路径其实是比较烦人的,不过值得庆幸的是npm可以引导任务执行,对npm进行配置后可以在命令行中使用简单的npmstart命令来替代上面略微繁琐的命令。在package.json中对scripts对象进行相关设置即可。/原有package.json内容,16,三.更快捷的执行打包任务,在package.json中对scripts对象进行相关设置即可。name:webpack-demo,version:1.0.0,description:,scripts:start:webpack/修改的是这里,JSON文件不支持注释,引用时请清除,author:,license:ISC,devDependencies:webpack:4.8.3注:package.json中的script会按照一定顺序寻找命令对应位置,本地的node_modules/.bin路径就在这个寻找清单中,所以无论是全局还是局部安装的Webpack,你都不需要写前面那指明详细的路径了。,17,三.更快捷的执行打包任务,npm的start命令是一个特殊的脚本名称,其特殊性表现在:在命令行中使用npmstart就可以执行其对于的命令,如果对应的此脚本名称不是start,想要在命令行中运行时,需要这样用npmrunscriptname如npmrunbuild,我们在命令行中输入npmstart试试,输出结果如下:npmstart,18,四.Webpack的强大功能,生成SourceMaps(使调试更容易)开发总是离不开调试,方便的调试能极大的提高开发效率,不过有时候通过打包后的文件,你是不容易找到出错了的地方,对应的你写的代码的位置的,SourceMaps就是来帮我们解决这个问题的。通过简单的配置,webpack就可以在打包时为我们生成的sourcemaps,这为我们提供了一种对应编译文件和源文件的方法,使得编译后的代码可读性更高,也更容易调试。,19,四.Webpack的强大功能,在webpack的配置文件中配置sourcemaps,需要配置devtool,它有以下四种不同的配置选项,各具优缺点,描述如下:source-map在一个单独的文件中产生一个完整且功能完全的文件。这个文件具有最好的sourcemap,但是它会减慢打包速度;cheap-module-source-map在一个单独的文件中生成一个不带列映射的map,不带列映射提高了打包速度,但是也使得浏览器开发者工具只能对应到具体的行,不能对应到具体的列(符号),会对调试造成不便;eval-source-map使用eval打包源文件模块,在同一个文件中生成干净的完整的sourcemap。这个选项可以在不影响构建速度的前提下生成完整的sourcemap,但是对打包后输出的JS文件的执行具有性能和安全的隐患。在开发阶段这是一个非常好的选项,在生产阶段则一定不要启用这个选项;cheap-module-eval-source-map这是在打包文件时最快的生成sourcemap的方法,生成的SourceMap会和打包后的JavaScript文件同行显示,没有列映射,和eval-source-map选项具有相似的缺点;,20,四.Webpack的强大功能,对小到中型的项目中,eval-source-map是一个很好的选项,再次强调你只应该开发阶段使用它,我们继续对上文新建的webpack.config.js,进行如下配置:module.exports=devtool:eval-source-map,entry:_dirname+/app/main.js,output:path:_dirname+/public,filename:bundle.jscheap-module-eval-source-map方法构建速度更快,但是不利于调试,推荐在大型项目考虑时间成本时使用。,21,五.使用webpack构建本地服务器,让你的浏览器监听你的代码的修改,并自动刷新显示修改后的结果。其实Webpack提供一个可选的本地开发服务器,这个本地服务器基于node.js构建,不过它是一个单独的组件,在webpack中进行配置之前需要单独安装它作为项目依赖。/本地开发服务器npminstall-save-devwebpack-dev-server,22,五.使用webpack构建本地服务器,把这些命令加到webpack的配置文件中,现在的配置文件webpack.config.js如下所示/devserver作为webpack配置选项中的一项module.exports=devtool:eval-source-map,entry:_dirname+/app/main.js,output:path:_dirname+/public,filename:bundle.js,devServer:contentBase:./public,/本地服务器所加载的页面所在的目录historyApiFallback:true,/不跳转inline:true/实时刷新,23,五.使用webpack构建本地服务器,在package.json中的scripts对象中添加如下命令,用以开启本地服务器:scripts:test:echoError:notestspecifiedmodule.exports=entry:./app/main.js,output:path:_dirname+/dist,filename:bundle.js,plugins:newHtmlWebpackPlugin();最后,运行一下上文所说的npmrundev命令,你会发现在dist目录生成了index.html文件,打开来看下。,28,2020/5/9,六.webpack插件html-webpack-plugin,要改变title很简单,上文提到HtmlWebpackPlugin这个方法可以传入很多参数的,下面这样就可以解决这个问题。varHtmlWebpackPlugin=require(html-webpack-plugin);module.exports=entry:./app/main.js,output:path:_dirname+/dist,filename:bundle.js,plugins:newHtmlWebpackPlugin(title:helloworld);,29,2020/5/9,六.webpack插件html-webpack-plugin,要让index.html根据我们的意愿来生成。就是说它的内容是我们自己定的。html-webpack-plugin的template功能。把webpack.config.js更改如下:varHtmlWebpackPlugin=require(html-webpack-plugin);module.exports=entry:_dirname+/app/main.js,output:path:_dirname+/public,filename:bundle.js,plugins:newHtmlWebpackPlugin(template:./dist/index.html,);,30,2020/5/9,六.webpack插件html-webpack-plugin,varHtmlWebpackPlugin=require(html-webpack-plugin);module.exports=entry:./app/main.js,output:path:_dirname+/dist,filename:bundle.js,plugins:newHtmlWebpackPlugin(template:./dist/index.html,filename:index.html,/默认情况下生成的html文件叫index.html,不想叫这个名字,可以改minify:collapseWhitespace:true,/把生成的index.html文件的内容的没用空格去掉,减少空间,hash:true,/为了更好的cache,可以在文件名后加个hash。bundle.js?f3cdsd6d56a565d7d565);,31,2020/5/9,六.webpack插件html-webpack-plugin,html-webpack-plugin肯定还有更多的用法和选项,这个只能根据需要慢慢探究了。先说这么多,32,2020/5/9,七.使用loader处理CSS和Sass,什么是loader?官方:loader用于对模块的源代码进行转换。loader可以使你在import或加载模块时预处理文件。因此,loader类似于其他构建工具中“任务(task)”,并提供了处理前端构建步骤的强大方法。loader可以将文件从不同的语言(如TypeScript)转换为JavaScript,或将内联图像转换为dataURL。loader甚至允许你直接在JavaScript模块中importCSS文件!,33,2020/5/9,七.使用loader处理CSS和Sass,WebPack简单的说就是它能够加载资源文件,并对这些文件进行一些处理,诸如编译、压缩等,最终一起打包到指定的文件中。它作为一个打包工具,在前端工程化浪潮中,起到了中流砥柱的作用。那webpack其中非常重要的一环就是,能够对加载的资源文件,进行一些处理。比如把less、sass文件编译成css文件,负责这个处理过程的,就是webpack的loader。,34,2020/5/9,七.使用loader处理CSS和Sass,loader用于对模块的源代码进行转换。loader可以使你在import或加载模块时预处理文件。因此,loader类似于其他构建工具中“任务(task)”,并提供了处理前端构建步骤的强大方法。说白了,就是loader类似于task,能够处理文件,比如把Scss转成CSS,TypeScript转成JavaScript等举个稍微复杂的例子,vue-loader,它官网介绍如下:vue-loader是一个Webpack的loader,可以将指定格式编写的Vue组件转换为JavaScript模块。Vue组件默认分成三部分,、和,我们可以把一个组件要有的html,js,css写在一个组件文件中,而vue-loader,会帮助我们去处理这个vue组件,把其中的html,js,css分别编译处理,最终打包成一个模块。,35,2020/5/9,七.使用loader处理CSS和Sass,1.实例:用css-loader和style-loader处理CSS先准备好内容。app/app.cssbodybackground:pink;app/main.jsimportcssfrom./app.css;constgreeter=require(./Greeter.js);/document.querySelector(body).appendChild(greeter()console.log(document.querySelector(body).appendChild(greeter();如果你现在运行npmrundev或webpack命令,就会出现提示错误,36,2020/5/9,七.使用loader处理CSS和Sass,默认情况下,webpack处理不了CSS的东西。我们来处理这个问题。$npminstall-save-devcss-loaderstyle-loader,37,2020/5/9,七.使用loader处理CSS和Sass,webpack.config.jsvarHtmlWebpackPlugin=require(html-webpack-plugin);module.exports=entry:./app/main.js,output:path:_dirname+/dist,filename:bundle.js,plugins:newHtmlWebpackPlugin(template:./dist/index.html,filename:index.html,minify:collapseWhitespace:true,hash:true,),module:rules:test:/.css$/,use:style-loader,css-loader;,38,2020/5/9,七.使用loader处理CSS和Sass,2.实例:用sass-loader把SASS编译成CSShttps:/www.sass.hk/docs/把app/app.css改名为app/app.scssapp/app.scssbodybackground:pink;pcolor:red;app/index.htmlHelloWorldhelloworld,39,2020/5/9,七.使用loader处理CSS和Sass,app/main.js引用更改为importcssfrom./app.scss;安装(中间可能要下载二进制包,要耐心等待)$npminstallsass-loadernode-sass-save-dev/未安装$npminstallsass-loadernode-sass/正确安装更改webpack.config.js文件内容module:rules:test:/.scss$/,use:style-loader,css-loader,sass-loader,40,2020/5/9,七.使用loader处理CSS和Sass,3.实例:用extract-text-webpack-plugin把CSS分离成文件有时候我们要把SASS或CSS处理好后,放到一个CSS文件中,用这个插件就可以实现。$npminstall-save-devextract-text-webpack-plugin,41,2020/5/9,七.使用loader处理CSS和Sass,webpack.config.jsvarHtmlWebpackPlugin=require(html-webpack-plugin);constExtractTextPlugin=require(extract-text-webpack-plugin);plugins:newHtmlWebpackPlugin(template:./src/index.html,filename:index.html,minify:collapseWhitespace:true,hash:true,),newExtractTextPlugin(style.css),module:rules:test:/.scss$/,use:ExtractTextPlugin.extract(fallback:style-loader,/resolve-url-loadermaybechainedbeforesass-loaderifnecessaryuse:css-loader,sass-loader);,42,2020/5/9,七.使用loader处理CSS和Sass,执行npminstall-save-devextract-text-webpack-plugin之后,执行npmrundev如果还报错(UnhandledPromiseRejectionWarning:Unhandledpromiserejection.),需要执行npminstallextract-text-webpack-pluginnext来解决这个版本不同导致的BUG,43,2020/5/9,我们之前使用webpack-d-watch来在开发环境下编译静态文件,但是这个功能,完全可以用webpack-dev-server来代替。除此之外,webpack-dev-server还有其他的功能,比如在本地上开启服务,打开浏览器等。这节我们主要来简单体验一下webpack-dev-server的功能。,八.初识webpack-dev-server,44,2020/5/9,八.初识webpack-dev-server,#先全局安装$npminstall-gwebpack-dev-server$npminstall-save-devwebpack-dev-server然后运行命令:$webpack-dev-server,45,2020/5/9,八.初识webpack-dev-server,默认是运行在8080端口,这个我们可以改。我们还可以配置一运行webpack-dev-server的时候就自动打开浏览器。webpack.config.jsvarHtmlWebpackPlugin=require(html-webpack-plugin);constExtractTextPlugin=require(extract-text-webpack-plugin);module.exports=entry:./src/app.js,.devServer:port:9000,open:true,.;,46,2020/5/9,九.用clean-webpack-plugin来清除文件,一般这个插件是配合webpack-p这条命令来使用,就是说在为生产环境编译文件的时候,先把build或dist(就是放生产环境用的文件)目录里的文件先清除干净,再生成新的。,47,2020/5/9,九.用clean-webpack-plugin来清除文件,1.webpack.config.jsconstpath=require(path)module.exports=entry:bundle:./app/main.js,output:path:path.resolve(_dirname,public),filename:name.chunkhash.js,.;$webpack-p,48,2020/5/9,九.用clean-webpack-plugin来清除文件,49,2020/5/9,九.用clean-webpack-plugin来清除文件,你再把app/main.js改改内容,然后再执行webpack-p。再多运行几次,生成的带hash的bundle.js文件就会很多。这些带hash的bundle.js只有最新的才有用,其他的都没用,我们要在build之前把它们全清空,这真是clean-webpack-plugin发挥的作用。2.开始使用clean-webpack-plugin首先来安装。$npmiclean-webpack-plugin-save-dev,50,2020/5/9,九.用clean-webpack-plugin来清除文件,webpack.config.jsconstCleanWebpackPlugin=require(clea

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论