美文网首页
2023.17 webpack按照文件夹进行打包(二)

2023.17 webpack按照文件夹进行打包(二)

作者: wo不是黄蓉 | 来源:发表于2023-04-13 20:54 被阅读0次
2023.17 webpack按照文件夹进行打包(二).png

大家好,我是wo不是黄蓉,今年学习目标从源码共读开始,希望能跟着若川大佬学习源码的思路学到更多的东西。

接上节内容,上节写的程序还有每次只能实现一个模块的打包且不能动态的

目标:我们要实现一个可以自动遍历目录下的文件夹,并且每次可以自动帮我们把所有模块的包都打包下来。

实现思路:最终还是按照npm run build modelA这样的方式来执行的,不过是让程序帮我们实现多条可执行的命令,然后挨个执行即可。

什么文件是可执行shell脚本的呢?

写一个.sh的文件,里面的命令就是我们挨个执行的命令。从公司组件库打包发布中学来的(所以还是要多学多看别人得代码,然后找到一个点自己实现,然后就可以发现其中得乐趣就不会学起来很吃力)

要怎么生成脚本命令呢?

使用node提供的fs模块,将读取到的模块存储到数组里面,然后遍历数组就获取到了文件夹名,然后遍历文件夹名就获得到了模块名。

此时我们需要修改一下vue.config.js的配置信息,将入口和从出口文件都改成动态的即可

const { defineConfig } = require("@vue/cli-service")
let projectName = process.argv[3]
module.exports = defineConfig({
  transpileDependencies: true,
  publicPath: "./",
  outputDir: `./dist/${projectName}`,
  pages: {
    index: {
      entry: `./src/views/${projectName}/index.js`,
      //指定模板
      template: "./public/index.html",
      //动态设置模板id
      templateID: projectName,
    },
  },
})

编写生成脚本命令的文件,build.cjs

const fs = require("fs")
const path = require("path")

//基础路径配置
const BASE_URL = path.resolve(__dirname)
//获取文件夹也就是模块名
function getDirs(realPath) {
  return new Promise((resolve, reject) => {
    fs.readdir(realPath, (err, files) => {
      resolve(files)
    })
  })
}
//读取模块路径
const dirPath = path.join(BASE_URL, "../src/views")
const files = []
let shell = ""
getDirs(dirPath).then((res) => {
  const dirs = res
    //每次进去的时候先清空
    fs.writeFile(path.join(BASE_URL, "./release.sh"), "", "utf-8", () => {
        dirs.forEach((dir) => {
            shell += `npm run build ${dir} \n`
              fs.writeFile(
                path.join(BASE_URL, "./release.sh"),
                shell,
                "utf-8",
                (err) => {
                    if(err) return
                    console.log("文件写入成功")
                }
              )
        })
    })
})

在package.json中配置快速执行命令:

  "scripts": {
    "dev": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "build:entry": "node ./bin/build1.cjs && npm run build:bash",
    "build:bash": "sh ./bin/release.sh",
    "lint": "vue-cli-service lint"
  },

打包执行结果如图所示:

image.png

源码参考

相关文章

  • 用 webpack 替换 requirejs 打包

    这篇文章里,使用requirejs对项目进行了打包,现在替换为 webpack 进行打包: 可以看到项目文件夹下多...

  • 初识webpack

    webpack初识 webpack是什么? 前端资源加载/打包工具。根据模块的依赖关系进行静态分析,将模块按照指定...

  • vue 搭建一个本地服务器运行打包后dist文件

    需求场景:完成一个vue项目后,利用webpack进行打包生成的dist文件夹,预览打包后的页面效果。说明:通常由...

  • webpack 先这么用

    webpack 介绍Webpack 是一个模块打包器。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的...

  • webpack 起步

    webpack webpack 就是一个前端资源打包工具,它根据模块的依赖关系进行静态分析,然后将这些模块按照指定...

  • webpack进阶【2】:webpack进行基本的打包配置

    webpack进行基本的打包配置 一、建目录 dist src/main.js 新建一个文件夹名为 【webapc...

  • Webpack打包结果分析

    一. 最简单的Webpack打包项目 单个文件打包(1) 按照Webpack操作指南中初始化、模块打包、模块热更新...

  • Webpack介绍

    什么是Webpack webpack是一个模块打包器。它根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规...

  • (五)模块化处理

    webpack可以将不同的文件都按照模块的方式进行处理,比如js,css等都可以通过不同的loader进行打包处理...

  • 简单-webpack学习笔记

    什么是Webpack? 按照官方文档的解释,Webpack就是个模块打包工具,将模块及其依赖打包生成静态资源。在W...

网友评论

      本文标题:2023.17 webpack按照文件夹进行打包(二)

      本文链接:https://www.haomeiwen.com/subject/gbczddtx.html