概念:Webpack是一个模块化打包工具,专注于构建模块化项目,在Webpack眼里一切文件都是模块,通过Loader转换翻译文件,通过Plugin注入钩子,最后输出由多个模块组合成的文件。
之所以一切文件皆模块,如:JavaScript、CSS、SCSS以及图片等资源,在Webpack眼中都是模块,因为这样可以更好的理清描述各个模块之间的依赖关系,方便Webpack对模块进行打包组合,输出浏览器使用的静态资源。
首先我们在创建一个文件夹,使用编辑工具(建议使用V S code 下载地址:https://code.visualstudio.com/)
之后我们打开VScode,在工作区域打开我们创建的文件夹,

Ctrl + `
打开终端

输入执行npm init
命令,会初始化得到一个简单的package.json
文件,执行该命令后终端会依次询问 name, version, description,这些不用管它,直接默认。如下图:

有了上述文件之后我们就可以来安装我们需要的包,我们需要的是webpack
和vue
,那我们就执行npm i webpack vue vue-loader
就可以了。安装好的如下图:

在这里面它有一些npm
的提醒,警告,来看一下什么意思,它是说vue-loader
(它会解析文件,提取出每个语言块,如果有必要会通过其他loader
处理,最后将他们组装成一个commonjs
模块)它需要css-loader
,我们需要根据它的提醒来安装就可以。如下图:

这样我们的项目就初始化好了。
我们可以在里面新建一个文件夹作为我们源码放置的目录,我们继续在里面建个app.vue
,在app.vue
写入

这样就是我们就得到一个最简单的vue组件,但是现在这个组件显然是无法在浏览器上运行的,这时候怎么做呢!我们继续,

这里我们创建一个webpack.config.js
文件,它是打包前端资源的,会把前端不同类型的一些json,css,图片,字体这些,作为前端资源需要通过http请求去加载的内容。在我们开发web-app
的时候都是一整个js
加载到浏览器端之后去渲染出来的,所以说我们很多时候都可以通过简单的js
文件作为我们的入口文件。
在这里我们声明的是一个绝对路径,它可以保证加载文件不出现错误,这个提示是编辑工具在鼠标移上去的时候给我们一个提示。

path
是我们node.js
的一个基本包,是用来处理路径的。
我们这里要使用一个js
文件如下图:

app.vue
这个组件不能直接挂载到HTML里面的,我们在index.js
里面引用一下,首先把vue
这个类库引入进来,然后new
一下vue
对象,在这个对象里声明一个render
方法它接收一个h
参数,通过它把咱们的.vue
挂载到html里面,这一步只是声明了咱们挂载的内容,真正挂载还需要调用$mount到我们HTML节点里面,这个节点就需要我们在这里继续创建,然后把它插入到节点里面

这样我们的入口文件就好了,然后我们把叫做index.js
的入口文件的路径输入到webpack.config.js
文件里,这里的变量__dirname
是node.js
支持的一个人变量,代表这个文件所在的绝对路径,它和后面的路径拼接起来是一个绝对路径,保证我们能绝对访问到。有了入口后,我们还要把文件输出如下图:

有了我们的index.js
这个文件,我们的webpack
才能把我们的vue
和这些.vue
打包成一个完整的bundle.js
,并且打包出来的是我们能够在浏览器里面直接运行的js
代码。之后我们需要在package.json
文件里加入"build": "webpack --config webpack.config.js"
这个命令,如下:

写完之后我们就可以直接在终端里运行一下

提示必须要安装一个cli
,按照它的提示来

我们这里有个错误,You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file .See
告诉我们需要为.vue
这种文件类型声明一个loader
。
webpack
的原生它是只支持js这种文件类型的,支持的语法是es5的,所以我们在使用超出它语法的时候,我们要使用帮它处理这些语法的工具

之后我们运行还是有问题

他说不支持css
我们给它添加上

来帮我们处理css文件,最终输出的没有在报错:

在webpack
里面每支持一种格式都要在这里配置的:

别忘了下载这些依赖,因为url-loader
依赖于file-loader
所以别忘了。我们给项目添加上


之后打包

我们会发现它把我们的图片打包上去了,在bundle.js
中搜索base64你会发现它正好跟我们引用的图片个数一样。说明它有用到
下面我们安一下npm i webpack-dev-server
之后在package.json
中添加字段:

因为我们这个配置文件是要同时应用在开发环境和正式环境上的,所以这个配置是要根据不同的环境做一些判断的,我们通过再跑npm scripts
的时候设置环境变量来标识我们是开发环境还是正式环境,需要安装另一个包npm i cross-env

之后就可以添加判断了


到这里我们编译的只有js和图片没有一个html去容纳我们的js文件,那我们的这个项目是跑不起来的,它缺少一个HTML文件作为它的入口,这里有个很好用的组件:npm i html-webpack-plugin
最终配置文件为


这时候运行代码npm run dev
,提示我们已经可以在http://localhost: 8080上运行了

页面显示为

网友评论