zoukankan      html  css  js  c++  java
  • webpack入门进阶(1)

    1.webpack应用实例

    1.1.快速上手

    初始化项目

    mkdir webpack-demo
    cd webpack-demo
    npm init -y
    

    安装webpack

    npm i webpack@4.41.0 webpack-cli@3.3.9 -D
    

    零配置使用webpack,webpack约束源文件目录必须为src, 默认配置文件为 src/index.js

    我们新建目录如下:

    webpack-demo
    ├── node_modules
    ├── src
    |   ├── index.js
    |   └── module1.js
    ├── package.json
    ├── package-lock.json
    

    index.js

    const fn1 = require("./module1")
    fn1()
    

    module1.js

    function fn1() {
      alert(1)
    }
    module.exports = fn1
    

    运行

    npx webpack
    

    注意: npx是npm的一个包运行器,是npm 5.2版本后提供的一个工具,它会自动找到项目下 node_modules/.bin下的相关命令来运行

    接下来,我们将运行命令配置到package.json

    "scripts": {
        "dev": "webpack --mode development"
    },
    

    配置完成后,我们就可以使用npm run dev来执行webpack命令了,注意: --mode是webpack的模式,有开发模式(development)和生产模式(production)

    1.2.自定义配置文件

    在前面我们使用的是webpack4的零配置运行的项目,如果我们需要实现更多的功能,我们需要自定义配置,比如:我们可以更改入口文件名、可以使用各种loader、插件等,webpack的配置文件名字通常是固定的,即webpack.config.js,配置都往这个文件里面写,因此,我们需要在项目根目录下创建好这个文件

    // 引入nodejs的path模块来处理路径
    const path = require("path")
    module.exports = {
      // 模式配置
      mode: "development",
      // 入口文件  通常使用绝对路径
      entry: path.resolve(__dirname, "./src/index.js"),
      // 出口配置
      output: {
        filename: "app.js",
        path: path.resolve(__dirname, "dist")
      }
    }
    

    上面已经在配置文件里设置了模式,因此,在package.json中就不需要传入mode这个参数了

    "scripts": {
        "test": "echo "Error: no test specified" && exit 1",
        "dev": "webpack"
      },
    

    1.3.拆分配置文件

    一般情况下,我们的环境会分为开发环境和生成环境,代码在开发阶段和部署到生成环境的配置有些是不一样的,因此,我们希望把这两种环境配置中不一样的配置分别写到不同的文件里面,这样方便区分,易于维护,把两种环境都相同的配置,放到一个基本配置文件里面,所以我们至少要将配置文件拆分成三个文件

    拆分后,我们的目录是这样的:

    webpack-demo
    ├── build
    |   ├── webpack.base.js
    |   ├── webpack.dev.js
    |   └── webpack.prod.js
    ├── node_modules
    ├── src
    |   ├── index.js
    |   └── module1.js
    ├── package.json
    ├── p
    

    我们如何来区分开发环境还是生产环境呢? 当我们运行webpack的时候,如果加了环境参数,我们是可以在配置文件中获取到的,例如:

      "dev": "webpack --env.development"
    

    上面的运行命令中增加了,--env.development这个参数,我们在配置文件中就可以获取到,获取方式如下

    // 当我们导出的时候是一个函数,第一个参数就是环境变量,我们就可以在环境变量里拿到对应的环境
    module.exports = function(env) {
      // { development: true }
      console.log(env)
    }
    

    基于以上的知识点,我们区分开发模式和生产模式的步骤为:

    1. 执行webpack命令的时候 传入环境参数  --env.development || --env.production
    
    2. 在webpack基本配置文件(webpack.base.js)中去获取环境参数
    
    3. 根据环境参数再去区分到底是去加载 webpack.dev.js 中的配置 还是去加载webpack.prod.js
    

    build/webpack.base.js

    const dev = require("../build/webpack.dev")
    const prod = require("../build/webpack.prod")
    const path = require("path")
    // 注意:需要先去安装这个包 npm i webpack-merge -D  这个包的作用是将配置合并
    const merge = require("webpack-merge")
    module.exports = function(env) {
      const isDev = env.development
      const base = {
        entry: path.resolve(__dirname, "../src/index.js"),
        output: {
          filename: "index.js",
          path: path.resolve(__dirname, "../dist")
        }
      }
      if (isDev) {
        return merge(base, dev)
      } else {
        return merge(base, prod)
      }
    }
    

    build/webpack.dev.js

    module.exports = {
      mode: "development"
    }
    

    build/webpack.prod.js

    module.exports = {
      mode: "production"
    }
    

    注意:在运行的时候,我们就要去指定配置文件了, 通过--config来实现指定配置文件

    package.json中的配置

     "scripts": {
        "test": "echo "Error: no test specified" && exit 1",
        "dev": "webpack --env.development --config ./build/webpack.base.js"
      },
    

    可以尝试着将上面--env.development 修改成--env.prodution试试看效果

    螺钉课堂视频课程地址:http://edu.nodeing.com

  • 相关阅读:
    Ms SQL 2K SP4 is avaialable!
    TSQL: 17 个与日期时间相关的自定义函数(UDF),周日作为周的最后一天,均不受 @@DateFirst、语言版本影响!
    编程将 .Net Assembly 里的类注册成 COM 类
    一个 TreeView 的派生类: TreeViewEx 实现 NodeShowToolTip、NodeDoubleClick 事件
    也谈 尉迟方 遇到的面试题! 参阅"装配脑袋" 实现"就地正法 in place"! 考察的是"栈"的思想!
    这几句 SQL 比较长! 没啥实用价值,但也要费费脑子! 权当习题: 《TSQL 生成公历年历》,仅供收藏!
    妙用 TSQL: PARSENAME 函数 (也可不使用该函数,鸣谢"小杰") 实现按指定分隔符拆分字符串 SplitString
    使数据库大字段的 Server Side ASP.Net Web/Http 下载,支持 FlashGet (Client) 断点续传多线程下载
    ArcGIS 的 http://localhost:8399/arcgis/rest/services 无法打开,显示404 的解决办法
    svn工作拷贝之降级
  • 原文地址:https://www.cnblogs.com/dadifeihong/p/12035960.html
Copyright © 2011-2022 走看看