zoukankan      html  css  js  c++  java
  • webpack+javascript搭建项目环境大概流程和各个流程的功能作用

    前言

    本文是对项目开发中webpack+原生js搭建流程的步骤梳理,和常见配置项的功能讲解.并不适用于vue/react框架

    因为实际项目上的配置代码过多,放在一章写太长了,怕看不下去,所以实际代码另写在这里,两篇文章可以搭配看:https://www.cnblogs.com/liuXiaoDi/p/12245421.html

    webpcak里配置的路径都建议使用path绝对路径

    初始化

       1.创建文件夹

       2.npm init  -y,执行这句话的目的是生成package.json文件

    安装webpack 和webpack-cli

        1.yarn add webpack webpack-cli@3.3.10 -D

         (这里指定webpack-cli版本是因为,webpack-cli最新的版本是4.xx测试版,和我的webpack-dev-server发生了冲突,导致dev-sever启动不起来),如果你在项目中出现了dev-server的问题,可以试着降低一下webpcak-cli的版本

    创建config文件夹做开发环境和生产环境的配置

    webpack的规则设置在webpack.config.js文件中.

    但是!!!实际开发中,产品有多个环境比如开发环境/测试环境/线上环境,每个环境的配置规则都不同.显然只靠webpack.config.js这一个文件不能满足我们的需求,我们需要拆分webpack.config.js

    通常webpack.config.js拆分为3个文件:

       1.base.config.js

       2.dev.config.js

       3.pro.config.js

    webpack基本配置项

    entry

    作用指明webpack打包时,使用那个模块作为构建依赖图的起点.webpack进入起点后会找出直接和间接的依赖,每个依赖随即被处理最终输入到bundle文件中

    entry中的模块路径最好是绝对路径,entry常见两种配置:

      单页应用(常见):

    const config = {
      entry: path.join(__dirname,'../src/main.js')
    };

       多页应用:如下告诉 webpack 需要 2 个独立分离的依赖图.多页应用在每次页面跳转时都会去获取新的html页面和重新下载相关资源

    const config = {
    
      entry: {
    
        pageOne: path.join(__dirname,'./src/pageOne/index.js'),
    
        pageTwo:path.join(__dirname,'./src/pageTwo/index.js')

      }
    };

    output

    作用是设置webpack如何向硬盘输出编译后的文件.注意即使是多页面应用页也只能指定一个输出配置,多页应用的时候为了保证每个输出的文件名具有唯一性,要使用占位符

    output属性最基本设置要包含filename和path

    多入口entry对应的output

    const config = {
    
      entry: {
    
        app: './src/app.js',
    
        search: './src/search.js'
    
      },
    
      output: {
    
        filename: '[name].js',
    
        path: __dirname + '/dist'
    
      }// 写入到硬盘:./dist/app.js, ./dist/search.js
    
     };
     module.exports = config;

    单入口entry对应的output

    const config = {
    
      output: {
    
        filename: 'bundle.js',
    
        path: '/home/proj/public/assets'
    
      }
    
    };
    
    
    module.exports = config;

    mode

    模式,webpack提供2中模式,每种模式对应不同的内置优化:development是开发环境,production是生产环境

    module.exports = {
    
        mode: 'development'
    
    }

    module

    module.rules

    规则数组,成员是对象,每个对象用于对特定的文件配置相关loader处理.对象内的常用规则如下:

    • test值是匹配规则,针对符合规则的文件进行处理
    • include值是路径,路径内的文件一定会使用loader处理
    • exclude值是路径,路径内的文件一定不会使用loader处理
    • use指定使用的loader和loader相关配置项,use的规则在下面会具体说明
    use规则

    use可以是字符串

    use可以是数组,当为数组时,内部成员可以是字符串也可以是对象,内部成员是对象时,有loader和options字段.loader指定我们需要的loader名称,options是对使用的loader的配置

    module.rules的例子

     module: {
            rules: [
                {
                    test: /.js$/,
                    loader: "babel-loader",
                    exclude: path.join(__dirname, "../node_modules")
                },
                {
                    //引入非模块化的插件
                    test: require.resolve('zepto'),
                    //转化成模块的方式
                    loader: 'exports-loader?window.Zepto!script-loader'
                },
                {
                    test: /.(png|jpg|gif|svg)$/,
                    use: {
                        loader: "url-loader",
                        options: {
    //options内部是对url-loader的配置
                            limit: 2048,
                            name: "img/[name].[ext]"
                        }
                    },
                    exclude: path.join(__dirname, "../node_modules")
                },
        ]
    }

    resolve

    resolve用于设置模块如何被解析,通常我们使用webpcak的默认解析配置.对于解析方式我们常用的只有路径别名配置

    resolve.alias

     resolve用于路径别名的配置,相当于给不同的路径起简称,使用如下

     resolve: {
            //别名的配置,相当于给不同的路径起简称
            alias: {
                "@": path.join(__dirname, "../src"),
                "view": path.join(__dirname, "../src/view"),
                "controller": path.join(__dirname, "../src/controller"),
                "lib": path.join(__dirname, "../src/lib"),
                "router": path.join(__dirname, "../src/router"),
                "styles": path.join(__dirname, "../src/styles"),
                "api":path.join(__dirname,"../src/api"),
                "model":path.join(__dirname,"../src/model"),
                "utils":path.join(__dirname,"../src/utils")
            }
        },
    //在配置文件中配置完成后,我们在具体的js文件中使用
    未配置前使用:import Header from '../../../src/component/header'
    配置完成后使用:import Header from '@/component/header';
    @就等于src的绝对路径

        - plugins

        - 

     

    .plugins常用的插件

        这几个插件用于包的配置

        html-webpack-plugin

        clean-webpack-plugin

        copy-webpack-plugin

         extract-text-webpack-plugin

         下载以上这些

         yarn add html-webpack-plugin clean-webpack-plugin copy-webpack-plugin extract-text-webpack-plugin@next -D

    .常用loader

    用于对模块的源代码进行转化,loader可以使你在import或者加载模块时预处理文件,类似于其他构建任务的task,比如可以将es6转化为es5,

         处理js的loader

            babel-loader

            @babel/core

            @babel/preset-env

            yarn add babel-loader @babel/core @babel/preset-env -D

            根目录下创建.babelrc文件,在该文件内做babel相关loader的配置

         处理图片的loader

            url-loader

            file-loader

    yarn add url-loader file-loader -D

        处理css的laoder

         style-loader:把.css文件以<style>形式引入到html中(传统方式以<link>形式在html中引入css)

         css-loader:加载.css文件

         node-sass:处理sass

         postcss-loader

         atutoprefixer

         yarn add 以上这些

         yarn add style-loader css-loader sass-loader postcss-loader autoprefixer -D

       

          处理vue单文件组件(如果做vue项目的化,看这里)

            vue-loader

            vue-template-compiler

            yarn add vue-loader vue-template-compiler -D

    .合并webpack配置项

    yarn add webpack-merge -D

     

    .webpack服务

    yarn add webpack-dev-server -D

     

  • 相关阅读:
    Windows7共享设置
    13-运算符
    13-数据类型转换
    06-移动web之flex布局
    09-sass
    08-less预处理器
    移动端必须掌握知识点
    11-JS变量
    10-响应式
    07-rem
  • 原文地址:https://www.cnblogs.com/liuXiaoDi/p/12297977.html
Copyright © 2011-2022 走看看