为什么要用webpack?

目录

初识webpack

webpack基本使用

补充

安装配置webpack-dev-server

安装配置 html-webpack-plugin

关于webpack中的loader

打包处理css文件

打包处理less文件  

打包处理样式表中的与url有关的文件

处理js中的高级语法

 关于项目发布


初识webpack

        早期的前端开发,用 HTML + CSS + JavaScript就可以了,把这些丢到浏览器中,浏览器就会显示出一个网页。

        后期为了更快的进行前端的开发,产生许多库,如操作DOM的jquery,操作css的Less等,这个时候前端程序员是舒服了,可浏览器不认识了,它没学啊。

        这时候就要利用一些工具将这些语言‘翻译’给浏览器,一个两个还好,当这些小工具多了的时候,不光维护麻烦,操作也麻烦,这时webpack诞生了。使用webpack来统一的管理这些编译小工具。可以理解为:由一个大工具管理一堆小工具,而我们只需要管理大工具就可以了。

        Webpack是前端资源的构建工具,也是静态模块打包器。提供 压缩,合并,解决兼容问题

webpack基本使用

非必要,会有脚本架自动生成相关配置,这里主要是主要是走一遍项目创建流程,体验一下webpack

1、创建空项目文件夹---全英文名 ,这里名字为Demo

2、进入当前文件的终端运行 npm init -y  ,初始化包管理配置文件,此时空文件夹内会自动生成一个package.json 文件。

【不知道npm是什么命令,没关系,可以先了解下node.js。node.js主要是将浏览器用于解析JS语言的引擎给分离了出来,让JS不通过浏览器也能运行。npm命令就是集成在node.js中的,主要用于管理节点插件(包括安装、卸载和管理依赖关系等)。】

 3、在项目文件夹内新建src 文件夹,并在里面新建 index.html  首页 和 index.js  脚本文件

4、初始化html文件 【 vscode 快捷键(!+ tab)】,写上相关结构,如多个列表

<body>
    <ul>
        <li>这是第1个li</li>
        <li>这是第2个li</li>
        <li>这是第3个li</li>
        <li>这是第4个li</li>
        <li>这是第5个li</li>
        <li>这是第6个li</li>
        <li>这是第7个li</li>
        <li>这是第8个li</li>
        <li>这是第9个li</li>
    </ul>
</body>

5、在当前项目的终端终端运行  npm install jquery -S ,下载jquery,用于对页面结构进行快速操作。【-S 是 --save的缩写,将包信息写入package.json文件中的"dependencies"下】


6、在index.js 文件内通过 import $ from 'jquery'  导入jquery库【记得带 ‘  ’ 号】,并进行相关操作的编写,如实现单双列表的隔行变色。

import $ from 'jquery'

$(function(){
    $('li:odd').css("background-color","red")
    $('li:even').css('background-color','pink')
})

7、此时在html的 头标签内  <script src="./index.js"> </script>,引入并运行是有问题的,因为浏览器不能识别 jquery 语法。因此列表的格式未发生变化。

 通过webpack来解决这个问题。

8、安装webpack,在项目终端运行以下命令,安装webpack相关的包文件

npm install [email protected] [email protected] -D

  -D 将文件写入package.json文件中的"devDependencies"下

     -S 和-D的区别是,一个只在开发中会用到,项目正式上线时就不存在了

9、在项目根目录中,创建名为webpack.config.js的配置文件,并初始化以下配置:

module.exports = {
	mode: 'development'   
}
//mode 用来构建模式的可选值有两个
// 1.development  开发环境,不会对打包生成的文件进行代码压缩和性能优化,且打包速度快,
//   适合在开发阶段使用。
// 2.production   生产环境,会对打包生成的文件进行代码压缩和性能优化,且打包速度很慢,
//   仅适合在项目发布阶段使用。

webpack.config.js是webpack的配置文件,webpack在真正开始打包构建之前,会先读取这个配置文件,从而基于给定的配置,对项目进行打包。

10、在package.json文件中的scripts节点下,新增脚本

"scripts": {
    "dev": "webpack"
}
//dev只是个名称,可以更具自己的喜好更改

11、在项目终端运行 npm run dev

在webpack中默认的打包入口文件为src下的index.js文件,默认的输出文件路径为自动生成的dist 下的main.js文件。

12、更改html中 <script >中的src 文件地址,<script src="../dist/main.js"></script>

13、此时再次运行会发现已经成功了。

补充

我们在运行  npm run dev 时,会先读取  webpack.config.js 的配置文件 , 然后再执行webpack,根据这个特性,我们还可以进行进一步的修改,调整。

webpack中默认的打包入口为 src->index.js   默认的输出文件路径为dist->main.js  我们可以在webpack.config.js 配置文件中通过entry节点指定打包入口,通过output节点指定打包的出口

const path =require('path') // 导入node.js中的专门操作路径的模块


module.exports={
    entry:path.join(__dirname,'./src/index.js'), //打包文件的入口文件的路径
    output:{
        path:path.join(__dirname,'./dist'),   //出口
        filename:'main2.js'},
    mode:'development'
}

 dist文件夹下出现了新的js文件。

在上述阶段,会发现,只要我们能稍微就改下 index.js 中的代码就需要重新run一次,才能看到修改后的页面,对于懒人程序员来说,可能会直接放弃这一行业,十分不友好。我们希望一修改代码页面就能看出变化。因此webpack中提供了两个插件来解决这个问题。 webpack-dev-server html-webpack-plugin  下载并配置就可以。

安装配置webpack-dev-server

下载npm install webpack-dev-server -D       【这里没有@指定版本,默认安装最新版。合格的程序猿需要跟上最新版,并解决可能出现的问题】

配置:修改 package.json -->scripts 中的 脚本命令 【这里改了个名字,将dev改为了test,实际上没什么影响】

 再次运行npm run test

这个时候会发现终端没有直接结束,而是在等待阶段,这个时候只要修改了index.js 中的代码,就会自动进行webpack的打包操作。

然而问题来了,我们会发现页面并没有根据我们的修改而进行相应的改变。这是因为vscode中的打开方式为 file 协议,而我们需要通过 http://localhost:8080/ 才能访问,

然而问题又来了,输入地址后浏览器不仅访问不到我们想要的界面,反而帅气的丢出了404。【为什么和我学的不一样,我好烦】

 我们返回去看 npm run test 运行时的提示,好像也看不出什么。。。。【这可能就是新版带来的痛苦】。通过查找资料发现,我们需要在 webpack.config.js 进行相关的设置

module.exports={
    entry:path.join(__dirname,'./src/index.js'), //打包文件的入口文件的路径
    output:{
        path:path.join(__dirname,'./dist'),   //出口
        filename:'main.js'},
    mode:'development',
    
    devServer: {
        static:'./',//根目录,需要点击进入src才能查看
        //static:path.join(__dirname, 'src'),//可以直接访问到src页面,实现页面的实时查看。
        host: "localhost",
        port: 8080,
        hot: true,
    },
}

 将 static:path.join(__dirname, 'src'),这样设置就可以直接访问到src页面,实现页面的实时查看。无需安装 html-webpack-plugin 了,这可能是新版带来的好处吧。。。

补充【重要!!!】npm run test 是通过webpack 将js 文件改写成浏览器能识别的文字。webpack-dev-server插件能提供快速打包访问是因为它将打包后的js文件直接存入了内存当中,【磁盘中访问不到,但通过浏览器输入文件名却能真实看到】这个时候我们需要更改html文件中的<script>标签,如下。不然页面不会进行相应的改变,因为它引入的还是上个版本的js'打包文件。

安装配置 html-webpack-plugin

下载 :npm install html-webpack-plugin -D

一个插件就能实现,这个还装个嘚。。。【有兴趣可以自行了解】

关于webpack中的loader

webpack默认值只能打包处理以.js 后缀结尾的模块,其他模块如.css文件则处理不了,这个时候需要调用loader加载器才能正常打包。       

当在 index.js文件中通过 import './index.css' 导入,但未调用loader时会出现一下错误。

打包处理css文件

        1、运行 npm i style-loader css-loader -D  安装插件

        2、在webpack.config.js文件中的 module.exports 内添加一下规则 module->rules

   module:{
        rules:[
            {test:/\.css$/,use: ['style-loader','css-loader']}
        ]
    }
//test表示要处理的文件类型,use表示使用的loader,有先后顺序,
//先经过css-loader处理再转交给style-loader处理,最终合并到js文件中

打包处理less文件  

        1、运行 npm i less-loader less -D  安装插件

        2、在webpack.config.js文件中的 module.exports 内添加一下规则module->rules

module:{
        rules:[
            {test:/\.less$/,use: ['style-loader','css-loader','less-loader']}
        ]
    }
//less-loader内部已经使用了less,无需再调用,注意调用顺序

打包处理样式表中的与url有关的文件

        1、运行 npm i url-loader file-loader -D  安装插件

        2、在webpack.config.js文件中的 module.exports 内添加一下规则 module->rules

module:{
        rules:[
            {test:/\.jpg|png|gif$/,use: 'url-loader?limit=4399'}
        ]
    }
//会将小于4399字节的图片转为base64格式,这样可以直接读取到图片,防止小图片频繁的进行请求

处理js中的高级语法

当js语法太过高级时,如装饰器语法,导致webpack也不认识时可以通过loader插件解决这个问题。

        1、npm i  babel-loader @babel/core @babel/plugin-proposal-decorators -D

        2、在webpack.config.js文件中的 module.exports 内添加一下规则 module->rules

module:{
        rules:[
            {test:/\.js$/,use: 'babel-loader',exclude:'/node_modules/'}
        ]
    }
//只要处理自己写的js文件就行,像第三方库中的js文件,它们本身就会做兼容性的处理,不需要我们担心

        3、配置babel,根目录新建babel.config.js

module.exports={
    "plugins": ["@babel/plugin-proposal-decorators"]
  }
//相当于插件的插件

 关于项目发布

新建脚本,运行 npm run buile 让生成的js文件保存到本地磁盘为不是内存,这时只要将dist文件交给后端去处理就可以。

 "scripts": {
    "test": "webpack serve ",
    "build": "webpack --mode production"
  },

解决浏览器中问题错误,行号不对应问题

猜你喜欢

转载自blog.csdn.net/qq_41045128/article/details/125434558