webpack 指定只打包index文件

  1. 文件路径读取 (实现指定文件打包)
const fs = require("fs");
const path = require("path");

const pagesResult = {};

// 需要忽略的pages目录下面的文件夹或者文件名称
const ignorePages = [];

// 表示获取那部分的路径当做 入口文件路径
// E:\FE\edu_xadmin\src\pages\new\k12_front_exam.js ==> \new\k12_front_exam
const buildFolder = '\\pages';

const webpackFiles = ["index.js", "index.jsx"];

// 递归读取文件夹下内容 (如果文件夹下有index.js  只打包index.js , 没有的话, 打包文件夹下文件)
function folderRead(filePath) {
  const fileItems = fs
    .readdirSync(filePath)
    .filter(item => !ignorePages.includes(item));
  const fileItemsLen = fileItems.length;
  for (let i = 0; i < fileItemsLen; i++) {
    // 文件路径
    const filedir = path.join(filePath, fileItems[i]);
    // 判断文件是否存在
    const fileStat = fs.statSync(filedir);
    if (fileStat.isDirectory()) {
      // 判断文件夹下面是否存在index.js  存在的话, 只打包index.js  不存在的话, 打包整个目录
      const filedirIndexJS = path.resolve(filedir, "index.js");
      // const filedirIndexJSX = path.resolve(filedir, 'index.jsx')
      try {
        // 文件不存在的话, 会抛出异常
        const indexJSFileStat = fs.statSync(filedirIndexJS);
        // 表示存在该文件 filedir/index.js
        if (indexJSFileStat) {
          let key = getFolderExt(filedirIndexJS, buildFolder);
          key = path.dirname(key);
          pagesResult[key] = filedirIndexJS;
        }
      } catch (e) {
        // 表示不存在 filedir/index.js 文件, 继续遍历filedir文件夹
        folderRead(filedir);
      }
    } else if (fileStat.isFile()) {
      // 排除掉json文件的影响
      if (!filedir.endsWith(".json")) {
        const key = getFolderExt(filedir, buildFolder);
        pagesResult[key] = filedir;
      }
    }
  }
}

// E:\FE\edu_xadmin\src\pages\new\k12_front_exam.js ==> \new\k12_front_exam
function getFolderExt(filedir, after) {
//   const keyTmp = filedir.split(after)[1].slice(1);
  const keyTmp = filedir.split(after)[1];
  const index = keyTmp.lastIndexOf(".");
  // 获取文件后缀前面的数据
  const key = keyTmp.substring(0, index);
  return key;
}

function folderRead2(filePath) {
  const fileItems = fs
    .readdirSync(filePath)
    .filter(item => !ignorePages.includes(item));
  const fileItemsLen = fileItems.length;
  for (let i = 0; i < fileItemsLen; i++) {
    const filedir = path.join(filePath, fileItems[i]);
    const fileStat = fs.statSync(filedir);
    if (fileStat.isDirectory()) {
      // 只要有一种类型的文件存在就返回文件地址, 证明存在index文件, 当前目录下的其他文件不需要打包
      const filedirIndexJS = isExists(filedir, webpackFiles);
      if (filedirIndexJS) {
        let key = getFolderExt(filedirIndexJS, buildFolder);
        key = path.dirname(key);
        pagesResult[key] = filedirIndexJS;
      } else {
        // 表示不存在该文件
        folderRead2(filedir);
      }
    } else if (fileStat.isFile()) {
      // 排除掉json文件的影响
      if (!filedir.endsWith(".json")) {
        const key = getFolderExt(filedir, buildFolder);
        pagesResult[key] = filedir;
      }
    }
  }
}

function isExists(filepath, fileArr) {
  var i = 0;
  for (i = 0; i < fileArr.length; i++) {
    try {
      const fsStat = fs.statSync(path.resolve(filepath, fileArr[i]));
      if (fsStat) {
        return path.resolve(filepath, fileArr[i]);
      }
    } catch (e) {}
  }
  if (i === fileArr.length) {
    return null;
  }
}

// 读取pages页面下面的所有目录文件
// folderRead(path.resolve(__dirname, './css_test/'));
folderRead2(path.resolve(__dirname, "./css_test/"));

console.log(pagesResult);
  1. webpack配置
module.exports = {
  // 多入口
  entry: pagesResult,
  output: {
    path: path.resolve(__dirname, 'build/pages'),
    filename: '[name].js',
    // ... 省略
  }
  // 省略....
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容