webpack:基础篇

一、webpack基础:  

            小弟第一次写博客,仅为了记录自己学习中的心得,方便自己以后翻阅。文中的图片我觉得说的很好,是从别的文章中拷贝过来的,忘记进行图片来源网址说明,抱歉。文中表述不准确,不对的的地方,请直接留言评论批评,我会认真修改,感谢!

1、大纲:

  A、webpack的定义

  B、6个核心概念:

    entry:入口文件(你要打包,就告诉我打包哪些,可以是单个入口文件,数组,对象标识)。入口起点指示 webpack 应该使用哪个模块,来作为构建其内部依赖图的开始。进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)依赖的。

    output:出口文件(我打包完了,给你放到哪里)。output 属性告诉 webpack 在哪里输出它所创建的 bundles,以及如何命名这些文件,默认值为 ./dist。基本上,整个应用程序结构,都会被编译到你指定的输出路径的文件夹中。你可以通过在配置中指定一个 output 字段,来配置这些处理过程。

    module:模块(放lorder,编译浏览器不认识的东西)。loader 让 webpack 能够去处理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)。loader 可以将所有类型的文件转换为 webpack 能够处理的有效模块,然后你就可以利用 webpack 的打包能力,对它们进行处理。

    plugins:插件(辅助开发,提高开发效率)。loader 被用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。插件接口功能极其强大,可以用来处理各种各样的任务。

    devServer:服务器(webpack提供的本地服务器)

    mode:模式,分为开发模式(development)、生产模式(production),webpack4.x版本新加的。通过选择 development 或 production 之中的一个,来设置 mode 参数,你可以启用相应模式下的 webpack 内置的优化。

  C、Vue官网Vue-Cli脚手架的简单使用

2、webpack:webpack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其转换和打包为 合适    的格式供浏览器使用。webpack 是一个现代 JavaScript 应用程序的静态模块打包器,是一个构建工具。当webpack 处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。webpack的官网是 https://webpack.github.io/ ,文档地址是https://webpack.github.io/docs,官网对webpack的定义是MODULE BUNDLER,翻译过来就是:模块打包机。

Webpack的工作方式是:把你的项目当做一个整体,通过一个给定的主文件(如:index.js),Webpack将从这个文件开始找到你的项目的所有依赖文件,使用loaders处理它们,最后打包为一个(或多个)浏览器可识别的JavaScript文件。请看下图:

推荐学习地址:https://www.cnblogs.com/BetterMan-/p/9867642.htmlhttp://webpack.wuhaolin.cn/https://segmentfault.com/a/1190000006178770https://segmentfault.com/a/1190000020403955https://www.cnblogs.com/ghostwu/p/7499237.html

3、webpack4.x安装(全局安装和局部安装)与卸载命令:(前提:由于webpack是基于node.js,首先去node.js官网安装最新版本):

A、安装命令:

全局安装:npm install webpack webpack-cli --save-dev -g

局部安装(在需要的文件夹中,cmd执行命令行):npm install webpack webpack-cli --save-dev  或者 npm install webpack webpack-cli --save-dev -s

B、卸载命令:

全局卸载:npm uninstall webpack webpack-cli -g

局部卸载(在需要的文件夹中,cmd执行命令行):npm uninstall webpack webpack-cli

C、说明:-g:代表全局安装 ,-s或者不加:代表局部安装,安装完成之后,可以查看版本:webpack -v;--save-dev:在package.json安装到开发环境 devDependencies,--save:在package.json安装到生产环境:dependencies。

4、npm全局安装与局部安装的区别:

A、全局安装:全局安装往往是安装一个工具,他不是安装在一个文件夹下,而是安装在某个全局环境下,如目前我的安装路径是:C:\Users\xhxy\AppData\Roaming\npm,可以看到这里面有webpack,webpack-cli,如下图:

 B、局部安装:是在需要的项目中,安装到了 ./node_modules 文件中了,可以看到这里面有webpack,webpack-cli,如下图:

5、webpack 开始之旅:

A、传统方式:

问题:

  浏览器在加载时,会先加载html文件,然后根据HTML里面的script标签去依次加载每个js文件。这样对于每个js文件,浏览器都会向服务器发送一次请求。如果引入的文件数很多,那么发送的请求次数就会

过多,对服务器造成一定的压力。而且,单个文件可能并不大,相对于浏览器对每次请求都需要建立链接、断开链接的成本来说很不划算。要解决这个问题,就需要打包,将多个js文件打包成单个。

  不同script标签引入的js代码,会污染全局作用域,比如a.js中声明的a就直接挂载到了window上,其他文件中如果再声明a变量,就会有冲突。

B、webpack命令:

  • npm init 和 npm init -y(-y可以让你省略去不停的yes)
  • npm install webpack webpack-cli --save-dev
  • 新建文件夹src,dist,在根目录中新建main.js(作为入口文件),在src目录中新建a.js,b.js文件。
  • 安装loader:  

   npm install css-loader style-loader --save-dev (样式处理的loader转换)  

   npm install url-loader file-loader --save-dev(图片、视频等文件的loader转换)   

  • 安装plugin:

   npm install html-webpack-plugin --save-dev(输出模板的插件)

   npm install clean-webpack-plugin --save-dev(清理dist文件夹的插件)

     npm install extract-text-webpack-plugin@next --save-dev(抽取css样式的插件,防止将样式打包在js中引起页面样式加载错乱的现象)

  • 配置本地服务器devserver:

     npm install webpack-dev-server --save-dev

C、这是我自己练习时,简单的配置文件:

//引用node.js 的path模块,设置路径
const path=require('path');
//引用HtmlWebpackPlugin插件
const HtmlWebpackPlugin=require('html-webpack-plugin');
//引用清理 /dist 文件夹插件
const { CleanWebpackPlugin }=require('clean-webpack-plugin');
//抽离css样式插件
const  ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports={
    //入口文件
    entry:'./main.js',
    //出口文件
    output:{
        //输出文件的路径,默认就是dist路径  注:__dirname表示当前文件所在的目录
        path:path.resolve(__dirname,'dist'),
        //输出的文件名
        filename:'js/bundle.js'
    },
    //模式  development or production
    mode:'development',
    //配置如何处理模块
    module:{
        rules:[
            {
                //正则匹配以.css结尾的文件
                test: /\.css$/,
                //需要用的loader,一定是这个顺序,因为调用loader是从右往左编译的
                // use: [
                //     'style-loader',
                //     'css-loader'
                // ]
                use:ExtractTextPlugin.extract({
                    fallback:'style-loader',
                    use:'css-loader'
                })
            },
            {
                test:/\.(jpg|png|gif)$/,
                use:[
                    {
                        loader:'url-loader',
                        options:{
                            //指定输出到dist打包文件夹的目录
                            outputPath:'img/',
                            //设置css样式文件中相对于图片文件的目录
                            publicPath:'../img',
                            //这样在小于8K的图片将直接以base64的形式内联在代码中,可以减少一次http请求;大于的话,会copy文件到新的文件夹中
                            limit:8192
                        }
                    }
                ]
            }
        ]
    },
    //插件
    plugins:[
        new HtmlWebpackPlugin({
            //文件名称,默认存放在dist中
            filename:'index.html',
            //文件的模板
            template:'./public/index.html'
        }),
        //默认清楚dist文件夹
        new CleanWebpackPlugin(),
        //从js中抽离css样式到指定dist文件夹中
        new ExtractTextPlugin("css/styles.css"),
    ],
    //devServer 服务器
    devServer:{
        host:'localhost',   //服务器的ip地址
        port:3000,  //端口
        open:true  //自动打开页面
    },
};

D、webpack 构建流程:

 6、vue-cli简单使用:

A、全局安装vue-vli 3.x :npm install @vue/cli -g ,通过命令查看版本: vue -V

B、创建项目: vue create vue-test   项目名称必须是小写:使用这种kebab-case风格

猜你喜欢

转载自www.cnblogs.com/KingRui/p/11666341.html