webpack 生成目录-webpack4系列教程(三):多页面解决方案--提取公共代码

2023-08-29 0 1,178 百度已收录

总结:手动生成项目中的文件在上一篇文章中,为了演示打包,我们在根目录下创建了一个并导入。 至此,我们已经在项目中成功实现了手动生成文件。 执行,命令行可见文件夹已被删除。

1. webpack中的CommonJS和ESMudule规范 1.1CommonJs规范

CommonJs规范的出发点:JS没有模块系统,标准库较少,缺乏包管理工具; 为了让JS可以在任何地方运行webpack 生成目录,实现用Java、PHP等后台语言开发小型应用程序的能力。

在 CommonJs 规范中:

文件是一个具有多个作用域的模块

以普通形式定义的变量、函数、对象都属于该模块;

通过require加载模块;

通过exports和modul.exports暴露模块的内容;

1.2 ES模块规格

ES6在语言标准层面实现了模块功能webpack 生成目录,其基本特征如下:

每个模块只加载一次,每个JS只执行一次。 如果上次加载同一目录下的同一文件,则直接从显存中读取;

每个模块中声明的变量都是局部变量,不会污染全局作用域;

模块内部的变量或函数可以通过export导入;

一个模块可以导出其他模块;

模块功能主要由export和import两个命令组成; export命令用于指定模块的外部socket,import命令用于导入其他模块提供的功能:

// esm.js
let firstName = "Jack";
let lastName = "Wang";
export {firstName, lastName}
// export命令除了输出变量,还可以输出函数
export function (a, b) {
  return a + b
}

使用export命令定义模块的外部socket后,其他JS文件就可以通过import命令加载该模块。 import 命令接受一对大括号,指定要从其他模块导出的变量名称。 大括号上方的变量名必须与导出模块的外部套接字同名。

// main.js
import {firstName, lastName} from "./esm";
function say() {
  console.log("Hello , " + firstName + " " + lastName)
}

1.3 使用

现在,在 src 目录中创建新的 sum.js 和 minus.js

// sum.js ES Mudule 规范
// export default命令,为模块指定默认输出
export default function (a, b) {
  return a + b
}

// minus.js commonJS 规范
module.exports = function (a, b) {
  return a - b
}

更改main.js

import sum from "./sum"
import minus from "./minus"
console.log("sum(1, 2): " + sum(1, 2))
console.log("minus(5, 2): " + minus(5, 2))

执行npmrunbuild后,打开index.html,可以在控制台看到输出结果。

2.在项目中手动生成HTML文件

上一篇文章中,为了演示打包后的main.bundle.js,我们在根目录下创建了一个index.html,并引入了main.bundle.js。 在实际项目中,我们可以手动生成HTML文件,并通过一个webpack插件:HtmlWebpackPlugin导入我们打包好的JS和CSS文件。

安装:

npm install --save-dev html-webpack-plugin

整理项目目录:

在根目录下创建config文件夹,将webpack.config.js移动到config中,并更改webpack.config.js:

const path = require("path")
const HtmlWebpackPlugin = require("html-webpack-plugin")
const config = {
  mode: "none",
  entry: {
    main: path.join(__dirname, "../src/main.js")
  },
  output: {
    filename: "[name].bundle.js",
    path: path.join(__dirname, "../dist")
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: path.join(__dirname, "../index.html"),
      inject: true,
      minify: {
        removeComments: true
      }
    })
  ]
}
module.exports = config

template:模板文件的路径,这里使用根目录下的index.html文件;

ject:设置为true则将JS文件注入到body的末尾,将CSS文件注入到head;

minify:removeComments:true表示删除模板文件中的注释,minify的配置选项有很多,请自行参考;

下一步是注释掉我们在index.html中自动引入的脚本:



    
    
    
    Title



执行npmrunbuild,可以看到dist目录下有一个index.html,这是HtmlWebpackPlugin生成的文件,打开dist/index.html,main.bundle.js已经手动引入,注释已经删除。

至此,我们已经在项目中成功实现了手动生成HTML文件。

3.清除/dist文件夹

每次执行 npmrunbuild 包时,都会留下之前的代码,导致我们的 /dist 文件夹相当混乱。 一般情况下,建议在每次创建之前清除/dist文件夹。

clean-webpack-plugin是一个比较流行的管理插件,让我们安装和配置:

npm install clean-webpack-plugin --save-dev

在 webpack.config.js 中使用:

const CleanWebpackPlugin = require("clean-webpack-plugin")

添加插件:

new CleanWebpackPlugin(["dist"],{root: path.join(__dirname, "../")})

第一个参数表示文件夹路径列表; 第二个参数是options配置项,root是webpack根文件夹的绝对路径,默认是__dirname,因为dist文件夹和webpack.config.js不再在同一个目录,所以我们需要重新定义根路径,因此很难找到 dist 文件夹。

执行npmrunbuild,命令行可见:

dist 文件夹已被删除。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 webpack webpack 生成目录-webpack4系列教程(三):多页面解决方案--提取公共代码 https://www.wkzy.net/game/182974.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务