• webpack(5)入口和出口


    一. 路径前提知识:

    node中的./表示: 在模块化代码中, 表示当前js文件的目录; 

                              在路径处理中, 表示node运行目录;webpack打包时,是指webpack.config.js所在的目录

                __dirname:当前js文件所在的目录, 是绝对路径;

    path.resolve("./","x","y"): 返回组合后的绝对路径 , 并且用的左斜杠, 能兼容不同系统       即: D:lessonwebpack_1whyxy
     
    二. 输出配置output
           1.path: 要手动配的话, 必须是绝对路径.  一般用node的path函数来配置, 一般不需要配置;用默认的dist就好
           2. filename: 对生成的js文件,而不是.map文件进行配置.可以用相对路径, 一般用占位符等动态规则配置, 占位符就相当于字符串中替换的内容;

     hash占位符: 解决浏览器缓存问题,       写成"[name].[hash:5].js" 或者"[name].[chunkhash:5].js"等

           浏览器缓存问题原因: 浏览器会把加载的文件内容缓存起来, 如果后端改了js文件, 没有修改文件名, 则浏览器不知道, 并不会请求新的js文件

           hash和chunkhash的不同: hash是总的资源重新赋给hash值, chunkhash只是对改变了的chunk作出修改.

           id作为占位符不要用, 因为生产环境和开发环境的id不一样.

         

    三 入口entry
           配置的是chunk: 是一个对象{chunk名称(默认是main): chunk的入口文件名(相对路径)}
           chunk入口文件可以是一个数组, 表示同时把数组内的文件都作为入口文件.
            多个入口, output必须用动态配置;
          
     
    入口和出口配置的最佳实践:
        分三种情况: 一个页面对应一个js, 一个页面对应多个js, 单页面应用
        
          1. 一个页面一个js: 这种方式适合页面之间功能差异巨大, 打包出来的公共代码很少的情况 
                  |---src
                      |---pageA  目录
                              |---index.js  pageA启动模块
                              |---...
                      |---pageB目录
                              |---index.js    pageB启动模块
                              |---...
                      |---pageC目录
                              |---main1.js    pageC启动模块1
                              |---main2.js   pageC启动模块2
                              |---...
                      |---common 公共代码目录
                              |---...  工具函数...
     
       webpack配置:
     1 module.exports={
     2   entry:{
     3     pageA:"./src/pageA/index.js",
     4     pageB:"./src/pageB/index.js",
     5     pageC:["./src/pageC/main1.js","./src/pageC/main2.js"]
     6 
     7   },
     8   output:{
     9     filename:"[name].[chunkhash:5].js"
    10   }
    注意:1. common目录中的公共代码, 可能会打包到不同的chunk中, 造成了打包后的代码出现重复, 但这并不影响维护.
    也就是说, 我们编写的代码是不重复的, 是好维护的, 只需要维护common目录中的代码就可以, 不需要管打包后的代码重复不重复
    2.如果打包后的公共代码比较多, 造成的问题是传输问题, 即浏览器获取和缓存的有很多是重复的代码.而不是维护问题
       2. 一个页面多个js: 这种方式适合有独立的模块功能, 如统计访问人数. 
                  |---src
                      |---pageA  目录
                              |---index.js  pageA启动模块
                              |---...
                      |---pageB目录
                              |---index.js    pageB启动模块
                              |---...
                      |---statics 目录
                              |---index.js    统计人数启动模
                              |---...
                      |---common 公共代码目录
                              |---...  工具函数...
     
    module.exports = {
      entry: {
        pageA: "./src/pageA/index.js",
        pageB: "./src/pageB/index.js",
        statics: ["./src/statics/index.js"]// 将统计模块作为单独入口打包, 在每个html中都可以引用
    
      },
      output: {
        filename: "[name].[chunkhash:5].js"
      }
     
       2. 单页面应用
                  |---src
                      |---subFunc  目录
                              |---...
                      |---subFunc  目录
                              |---...
                      |---subFunc  目录
                              |---...
                      |---index.js
     
    module.exports = {
      entry: "./src/index.js",
      output:{
        filename: "index.[hash:5].js"
      }
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    斑马打印交叉线制作方法
    c# 导出2007格式的Excel的连接字符串
    MySql数据库 timeout超时报警的解决方法
    c# 根据域名的到对应的IP
    c# 开发+MySql数据库
    c# datagridview导出Excel文件 问题
    ae GP制作缓冲区分析
    ae 地理坐标与投影坐标转换 [转]
    Dev Winform 简洁界面模板制作
    Dev TreeList 总结
  • 原文地址:https://www.cnblogs.com/dangdanghepingping/p/14494888.html
Copyright © 2020-2023  润新知