Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用 webpack 的 node api 学习 webpack

使用 webpack 的 node api 学习 webpack

作者头像
山月
发布于 2022-11-02 08:42:55
发布于 2022-11-02 08:42:55
66700
代码可运行
举报
运行总次数:0
代码可运行

在我们使用 webpack 的大部分项目中,都需要使用 webpack.config.js 来配置 webpack。

我们学习 webpack 的过程也就是学习 webpack 配置文件的过程,因此人称 webpack 配置工程师。

「在学习过程中」,我个人不建议使用 webpack.config.js 来学习 webpack。

原因只有一个:webpack cli 实在是太难调试了!」

1. 跳来跳去的 webpack cli

当我们执行 webpack 命令时发生了什么?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ webpack
  1. 调用执行 webpack 包对应的 bin/webpack.js 文件,然后继续调用 webpack-cli
  2. 调用执行 webpack-cli1 包对应的 bin/cli.js 文件,然后继续调用 webpack
  1. 调用执行 webpack 包的 API 进行打包

你说,这直接调用 webpack 的 API 进行学习不更好吗?当然,仅限于学习。

除了学习,学习 webpack api 还有一些其他场景。

2. 使用 webpack api 开发

如果你需要基于 webpack 做一个脚手架,那很大可能是通过 webpack api 来完成的。

比如 create-react-app 的 react-scripts2,便是直接通过 webpack api 进行打包。

见代码3。

其它脚手架应该也是,但我没有一一验证。

3. 使用 webpack api

使用 webpack api 也特别容易,将以前 webpack.config.js 的配置,作为参数传递给 webpack 函数即可。详见文档 webpack node api4。

Q:既然直接将参数传递给 webpack 函数即可,那 webpack-cli 的主要作用岂不是读取文件?

示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const webpack = require('webpack')

const compiler = webpack({
  // webpack 的诸多配置置于此处
  entry: './index.js'
})

compiler.run((err, stat) => {

})

使用 webpack 进行学习及测试也非常方便,比如使用它测试不同 mode 对打包资源的影响:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
webpack([
  {
    entry: './index.js',
    mode: 'production',
    output: {
      filename: 'main.production.js'
    }
  },
  {
    entry: './index.js',
    mode: 'development',
    output: {
      filename: 'main.development.js'
    }
  },
  {
    entry: './index.js',
    output: {
      filename: 'main.unknown.js'
    }
  }
]).run((err, stat) => {

})

4. 关于 webpack 的示例

我将所有关于 webpack 学习的示例放在了 node-examples5 中。

执行 node build.js,用以查看构建示例,而在 build.js 中,会维护 N 份 webpack 配置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 学习配置一
function f1 () {
  return webpack({
    entry: './index.js',
    mode: 'none',
    output: {
      iife: false,
      pathinfo: 'verbose'
    }
  })
}

// 学习配置二
function f2 () {
  return webpack({
    entry: './index.js',
    mode: 'none',
    optimization: {
      runtimeChunk: true,
    }
  })
}


// 学习配置一时,切换到 f1,学习配置二时,切换到 f2
f1().run((err, stat) => {
  // console.log(stat.toJson())
})

参考资料

[1]

webpack-cli:https://github.com/webpack/webpack-cli/tree/master/packages/webpack-cli

[2]

react-scripts:https://github.com/facebook/create-react-app/tree/main/packages/react-scripts

[3]

见代码:https://github.com/facebook/create-react-app/blob/main/packages/react-scripts/scripts/build.js#L146

[4]

webpack node api:https://webpack.js.org/api/node

[5]

node-examples:https://github.com/shfshanyue/node-examples/tree/master/engineering/webpack

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈成长之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
webpack 初识配置文件
不知道你思考过一个问题没有,我们在使用vue和react脚手架创建的项目中,并没有见到个webpack的出现,这是为什么?
用户4793865
2023/01/12
4410
webpack 初识配置文件
关于Webpack前端工程化构建,你必须要掌握这些核心知识点
在很久之前,模块化管理还没有出现,如果我们开发一个页面想要引入一些依赖的话,最常见的做法就是将依赖文件引入到.html文件中。比如,我们要使用JS的一些依赖库,就要在.html文件中使用<script>标签引用;要引用CSS的依赖就要使用<link>标签。如果页面中引入的依赖文件太多,那么向服务发送的请求也随之增多,势必会拖慢网页的加载速度,影响用户体验。另外,网页的内容也会变得很臃肿,增加维护的难度。
江一铭
2022/06/17
1.8K0
关于Webpack前端工程化构建,你必须要掌握这些核心知识点
webpack——快速入门【一】
https://github.com/webproblem/learning-article#webpack
思索
2024/08/16
1100
webpack——快速入门【一】
创建 React 应用的 7 种方式,你用过几种?
首先,我们第一个是想到的是 react 官方团队提供的脚手架工具 Create React App(cra)
狂奔滴小马
2023/03/16
7.5K0
创建 React 应用的 7 种方式,你用过几种?
webpack教程:如何从头开始设置 webpack 5
最近开源了一个 Vue 组件,还不够完善,欢迎大家来一起完善它,也希望大家能给个 star 支持一下,谢谢各位了。
前端小智@大迁世界
2020/11/24
2.2K0
webpack教程:如何从头开始设置 webpack 5
Create React App v3 + Webpack v4 多页应用配置
仓库地址:https://github.com/xunge0613/react-multipage-app
前端老王
2020/11/11
1.4K0
Create React App v3 + Webpack v4 多页应用配置
Create React App 源码揭秘
文章首发于@careteen/create-react-app,转载请注明来源即可。
Careteen
2022/02/14
3.7K0
Create React App 源码揭秘
使用 webpack 4 和 Babel 7 构建 React 应用及如何引入 Material Design
在过去的一年和一些人中,我一直在与 Creative Tim 合作。 我一直在使用 create-react-app 来开发一些不错的产品。 有很多客户询问如何在 Webpack 上迁移我们的产品模板。
前端小智@大迁世界
2019/03/15
9.4K0
使用 webpack 4 和 Babel 7 构建 React 应用及如何引入 Material Design
pwa+webpack,初探与踩坑0.前言1.webpack2.pwa3.基于webpack的pwa
我们都知道pwa是一个新技术.,依靠缓存,离线了还能正常跑,而且秒开。我把以前原生写的小游戏迁移到react,再迁移到webpack+react,最后再升级到pwa。具体介绍不多说,我们开始撸吧。
lhyt
2018/10/31
6520
webpack 4.x 初级学习记录
以上就是4版本之前的使用方式,但是这种方式在4版本中就不能使用了,4版本有自己的新的方式
SpiritLing
2018/10/10
7220
webpack实战——打包第一个应用
作为前端开发者,我们以前在浏览器中运行 JavaScript ,会引用一些脚本来存放每个功能;此解决方案很难扩展,因为加载太多脚本会导致网络瓶颈;亦或使用一个包含所有项目代码的大型 .js 文件,但是这会导致作用域、文件大小、可读性和可维护性方面的问题。
流眸
2020/07/06
6870
webpack手动配置React开发环境
React提供了create-react-app的快速构建工具, 但作为一个专业的程序员(老司机), 面对复杂的项目, 入门级的构建工具, 是远远不够的, 我们这里从零开始, 用webpack, 手动
zhaoolee
2018/07/03
9660
还学不会webpack?看这篇!
Webpack已经流行好久了,但很多同学使用webpack时还是一头雾水,一下看到那么多文档、各种配置、各种loader、plugin立马就晕头转向了。我也不例外,以至于很长一段时间对webpack都是一知半解的状态。但是想要继续做好前端,webpack是必须得跨过的一道坎,其实掌握webpack并不难,只是我们没有找到正确的方法。本文就是我自己在学习webpack时的一点心得体会,供大家参考。
MudOnTire
2019/07/02
4850
还学不会webpack?看这篇!
webpack从0到1构建
webpack是一个静态打包工具,根据入口文件构建一个依赖图,根据需要的模块组合成一个bundle.js或者多个bundle.js,用它来展示静态资源
Maic
2022/07/28
1.2K0
webpack从0到1构建
Webpack搭建ES6开发环境(部分摘自网络)
首先要有node环境,进入Node.js的官网,选择对应系统下载安装包。安装node后集成了npm管理器
江一铭
2022/07/05
2640
从零开始配置webpack(基于webpack 4 和 babel 7版本)
webpack启动后会从 Entry 里配置的 Module 开始递归解析 Entry 依赖的所有Module.每找到一个Module,就会根据配置的Loader去找出对应的转换规则,对Module进行转换后,再解析出当前的Module依赖的Module.这些模块会以Entry为单位进行分组,一个Entry和其所有依赖的Module被分到一个组也就是一个Chunk。最好Webpack会把所有Chunk转换成文件输出。在整个流程中Webpack会在恰当的时机执行Plugin里定义的逻辑。
胡哥有话说
2019/09/12
6300
VUE-webpack
Webpack 是一个前端资源的打包工具,它可以将js、image、css等资源当成一个模块进行打包。
cwl_java
2020/02/11
8900
如何用 esbuild 替换 Create React App 中的 Webpack
原文链接:https://devtails.xyz/how-to-replace-webpack-in-create-react-app-with-esbuild[1]
chuckQu
2022/08/19
2.7K0
如何用 esbuild 替换 Create React App 中的 Webpack
前端技术 Webpack(学习 Webpack 的原因,Webpack 快速入门)
学习 Webpack 的原因 目前前端技术发展很快,引入了越来越多的思想、框架和工具 现阶段的大型应用就要求前端必须要有独立的项目,独立的项目想要有足够的效率就必须进行工程化。 具有复杂数据状态的应用
RendaZhang
2020/09/08
1.8K0
前端技术 Webpack(学习 Webpack 的原因,Webpack 快速入门)
webpack 入门教程
本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。
老马
2018/08/20
4K0
webpack 入门教程
相关推荐
webpack 初识配置文件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文