Skip to content

知识补充

js
1./*  './'在不同的环境下代表的不一样*/

模块化代码中,比如require("./"),表示当前js文件所在的目录

在路径处理中,"./"表示node运行目录,即`node xxx.js`时,node所在的文件夹

__dirname: 所有情况下,都表示当前运行的js文件所在的目录,它是一个绝对路径

//2.node的内置模块path
path.resolve() 可以将路径拼接为绝对路径

var result = path.resolve("./", "child", "abc", "123");// D:/child/abc/123

var result = path.resolve(__dirname, "src");
console.log(result);//		xxxx/src

入口和出口

node内置模块 - path: https://nodejs.org/dist/latest-v12.x/docs/api/path.html

出口

这里的出口是针对资源列表的文件名或路径的配置

出口通过output进行配置

js
const path = require("path");

module.exports = {
  mode: "developemnt",
  //
  output: {
    /*配置出口路径,必须要是一个绝对路径,不要使用手写的,因为在windows和mac上,路径表示不一样(/ 和 \)*/
    /*推荐使用path模块 */
    path: path.resolve(__dirname, "dist"),
    /*配置合并后的js的文件规则 */
    filename: "bundle.js", //静态规则
    // filename: "scripts/bundle.js", //会在dist文件夹下创建一个scripts文件夹
  },
};

入口

入口真正配置的是chunk

入口通过entry进行配置

1.配置单个chunck入口文件

js
const path = require("path");

module.exports = {
  mode: "developemnt",
  // 入口--配置的是chunk入口文件,而chunk有多个,必定也可配置多个入口文件
  entry: "./src/index.js",//相当于下面的
   entry: {
     //完整配置 {chunck名称:入口文件路径}
     main: "./src/index.js",
   },

  //
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "bundle.js",
  },
};

2.配置多个chunk入口文件

js
const path = require("path");

module.exports = {
  mode: "developemnt",
  //
  entry: {
    main: "./src/index.js",
    a: "./src/a.js",
  },
  //
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "[name].js",//必须使用动态配置,因为会在dist文件夹下生成两个打包后的文件
  },
};

/*
dist
	-a.js
	-main.js
*/

3.配置一个chunk的多个入口

js
const path = require("path");

module.exports = {
  mode: "developemnt",
  //
  entry: {
    main: "./src/index.js",
    //配置一个chunk的两个入口文件,但是还是只生成一个.js文件,但是这个js文件会将这两个模块都给运行了,详细可以去查看打包出来的js文件
    a: ["./src/a.js", "./src/index.js"],
  },
  //
  output: {
    path: path.resolve(__dirname, "target"),
    filename: "[name].[chunkhash:5].js",
  },
};

出口filename规则:

  • name:chunkname

  • hash: 总的资源hash,

    --通常用于解决缓存问题,因为浏览器会缓存已经加载过的js文件,当内容改变后,浏览器因为缓存不会重新请求该js文件,所以使用hash值可以确保每次都是浏览器不会缓存的,让浏览器进行重新请求。

  • chunkhash: 使用chunkhash

  • id: 使用chunkid,不推荐,因为在开发、生产环境下id表现不一致。开发下id和name同名,生产下id是从0开始

js
const path = require("path");

module.exports = {
  mode: "developemnt",
  //
  entry: {
    main: "./src/index.js",
    a: "./src/a.js",
  },
  //
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "[name].js",//使用chunk的name来作为出口打包的文件
    filename: "[name].[hash:5].js",//使用总的bundle的hash来命名,其中一个入口chunk内容改变,所有的都会改变
   	filename:"[chunkhash:5].js",//使用的是每个chunk的hash值,其中一个chunk改变,只会更新自己的出口文件名
  },
};

MIT License