首页 > 其他分享 >webpack 起步

webpack 起步

时间:2023-08-26 13:34:52浏览次数:36  
标签:npm index 起步 lodash modules js webpack

Webpack 起步

webpack 用于编译 JavaScript 模块。一旦完成 安装,你就可以通过 webpack CLI 或 API 与其配合交互。如果你还不熟悉 webpack,请阅读 核心概念 和 对比,了解为什么要使用 webpack,而不是社区中的其他工具。

基本安装

首先我们创建一个目录,初始化 npm,然后 在本地安装 webpack,接着安装 webpack-cli(此工具用于在命令行中运行 webpack):

mkdir webpack-demo
cd webpack-demo
npm init -y
npm install webpack webpack-cli --save-dev

现在,我们将创建以下目录结构、文件和内容:
project

 webpack-demo
  |- package.json
  |- package-lock.json

创建一个 bundle

安装 lodash

npm install --save lodash

新建 dist/index.html

<!DOCYTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Webpack Getting Started</title>
  </head>
  <body>
    <script src="main.js"></script>
  </body>
</html>

新建 src/index.js

import _ from 'lodash';

function component() {
  const element = document.createElement('div');
  element.innerHTML = _.join(['Hello', 'webpack'], ' ');
  return element;
}

document.body.appendChild(component());

修改 package.json

{
   "name": "webpack-demo",
   "version": "1.0.0",
   "description": "",
   -"main": "index.js",
   +"private": true,
   "scripts": {
     "test": "echo \"Error: no test specified\" && exit 1"
   },
   "keywords": [],
   "author": "",
   "license": "MIT",
   "devDependencies": {
     "webpack": "^5.38.1",
     "webpack-cli": "^4.7.2"
   }
 }

在此示例中,<script> 标签之间存在隐式依赖关系。在 index.js 文件执行之前,还需要在页面中先引入 lodash。这是因为 index.js 并未显式声明它需要 lodash,而是假定推测已经存在一个全局变量 _。

使用这种方式去管理 JavaScript 项目会有一些问题:

  • 无法直接体现脚本的执行依赖于外部库。
  • 如果依赖不存在,或者引入顺序错误,应用程序将无法正常运行。
  • 如果依赖被引入但是并没有使用,浏览器将被迫下载无用代码。
  • 让我们使用 webpack 来管理这些脚本。

在这个设置中,index.js 显式要求引入的 lodash 必须存在,然后将它绑定为 _(没有全局作用域污染)。通过声明模块所需的依赖,webpack 能够利用这些信息去构建依赖图,然后使用图生成一个优化过的 bundle,并且会以正确顺序执行。

换言之,执行 npx webpack 会将我们的脚本 src/index.js 作为 入口起点,也会生成 dist/main.js 作为 输出。Node 8.2/npm 5.2.0 及以上版本提供的 npx 命令,可以运行在最初安装的 webpack package 中的 webpack 二进制文件(即 ./node_modules/.bin/webpack):

$ npx webpack
[webpack-cli] Compilation finished
asset main.js 69.3 KiB [emitted] [minimized] (name: main) 1 related asset
runtime modules 1000 bytes 5 modules
cacheable modules 530 KiB
  ./src/index.js 257 bytes [built] [code generated]
  ./node_modules/lodash/lodash.js 530 KiB [built] [code generated]
webpack 5.4.0 compiled successfully in 1851 ms

在浏览器中打开 dist 目录下的 index.html,如果一切正常,你应该能看到以下文本:'Hello webpack'。

模块

ES2015 中的 import 和 export 语句已经被标准化。虽然大多数浏览器还无法支持它们,但是 webpack 却能够提供开箱即用般的支持。

事实上,webpack 在幕后会将代码 “转译”,以便可以在旧版本浏览器中执行。如果你检查 dist/main.js,你可以看到 webpack 具体是如何工作的,这是独创精巧的设计!除了 import 和 export,webpack 还能够很好地支持多种其他模块语法,更多信息请查看 模块 API。

注意,webpack 不会更改代码中除 import 和 export 语句以外的部分。如果你在使用其它 ES2015 特性,请确保 webpack 的 loader 系统 中使用了像 Babel 一样的 transpiler(转译器)。

使用配置文件

在 webpack v4 中,无须任何配置即可运行,然而大多数项目会需要很复杂的设置,这就是为什么 webpack 仍然要支持 配置文件。这比在 terminal(终端)中手动输入大量命令要更加高效,所以让我们创建一个配置文件:
project

webpack-demo
  |- package.json
  |- package-lock.json
 |- webpack.config.js
  |- /dist
    |- index.html
  |- /src
    |- index.js

webpack.config.js

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'main.js',
    path: path.resolve(__dirname, 'dist'),
  },
};

现在,让我们通过新的配置文件再次执行构建:

$ npx webpack --config webpack.config.js
[webpack-cli] Compilation finished
asset main.js 69.3 KiB [compared for emit] [minimized] (name: main) 1 related asset
runtime modules 1000 bytes 5 modules
cacheable modules 530 KiB
  ./src/index.js 257 bytes [built] [code generated]
  ./node_modules/lodash/lodash.js 530 KiB [built] [code generated]
webpack 5.4.0 compiled successfully in 1934 ms

比起 CLI 这种简单直接的使用方式,配置文件更加灵活。我们可以在配置文件中指定 loader 规则、插件、resolve 选项,以及许多其他增强功能。

npm scripts

考虑到用 CLI 这种方式来运行本地的 webpack 副本并不是特别方便,我们可以设置一个快捷方式。在 package.json 文件中添加一个 npm script:
package.json

{
   "name": "webpack-demo",
   "version": "1.0.0",
   "description": "",
   "private": true,
   "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack"
   },
   "keywords": [],
   "author": "",
   "license": "ISC",
   "devDependencies": {
     "webpack": "^5.4.0",
     "webpack-cli": "^4.2.0"
   },
   "dependencies": {
     "lodash": "^4.17.20"
   }
 }

现在,可以使用 npm run build 命令替代之前使用的 npx 命令。注意,使用 npm scripts 便可以像使用 npx 那样通过模块名引用本地安装的 npm packages。这是大多数基于 npm 的项目遵循的标准,因为它允许所有贡献者使用同一组通用脚本。

现在运行以下命令,然后看看你的脚本别名是否正常运行:

$ npm run build

...

[webpack-cli] Compilation finished
asset main.js 69.3 KiB [compared for emit] [minimized] (name: main) 1 related asset
runtime modules 1000 bytes 5 modules
cacheable modules 530 KiB
  ./src/index.js 257 bytes [built] [code generated]
  ./node_modules/lodash/lodash.js 530 KiB [built] [code generated]
webpack 5.4.0 compiled successfully in 1940 ms

总结

现在,你已经有了一个基础构建配置,你可以移至下一指南——资源管理,以了解如何通过 webpack 管理诸如图像、图标等资源。此刻你的项目目录看起来应该如下:

project

webpack-demo
|- package.json
|- package-lock.json
|- webpack.config.js
|- /dist
  |- main.js
  |- index.html
|- /src
  |- index.js
|- /node_modules

标签:npm,index,起步,lodash,modules,js,webpack
From: https://www.cnblogs.com/goallin/p/17658699.html

相关文章

  • 使用Webpack进行模块化开发与打包
    1.什么是WebpackWebpack是一个现代化的JavaScript模块打包工具,它可以将多个模块打包成一个或多个静态资源文件。通过Webpack,我们可以将项目中的各个模块进行模块化开发,并将它们打包成一个或多个可供浏览器加载的静态资源文件。2.Webpack的优势使用Webpack进行模块化开发与打包......
  • 为什么vite比webpack速度快
    一.webpack为什么慢主要是由于其内部的核心机制——bundle模式引发的webpack通过bundle机制,将项目中各种类型的源文件转化供浏览器识别的js、css、img等文件,建立源文件之间的依赖关系,将数量庞大的源文件合并为少量的几个输出文件。bundle工作机制的核心部分分为两块:构建......
  • 跳槽前,最后撸一遍 Webpack 核心原理、babel、性能优化!
    又到一年金三银四,面试官今年最爱问点啥?说起前端工程师进阶,Webpack是一个绕不开的话题,每年都会很多新面试题源源不断的涌来,例如:Webpack的打包原理是什么?什么是loader,什么是plugin?什么是模热更新?有什么优点?Webpack之于前端,正如同gcc/g++之于C/C++。不论你用React、Vue还是Angu......
  • webpack学习笔记专题目录
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]学习笔记专题目录webpack专题目录webpack学习笔记MacBook搭建python开发环境【必须】安装Python【必须】安装pip【必须】virtualenv的安装和使用【推荐】安装PyCharm【推荐】Py......
  • webpack 是什么
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]是什么Webpack是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。从图中我们可以看出,Webpack可以将多种静态资源......
  • webpack 五大核心概念
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]五大核心概念一、Entry入口(Entry)指示Webpack以哪个文件为入口起点开始打包,分析构建内部依赖图。二、Output输出(Output)指示Webpack打包后的资源bundles输出到哪里去,以及如何命名。......
  • webpack学习笔记所使用的版本信息
    学习笔记所使用的版本信息学习笔记用到的npm包版本信息[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]......
  • 记录--webpack和vite原理
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前言每次用vite创建项目秒建好,前几天用vue-cli创建了一个项目,足足等了我一分钟,那为什么用vite比webpack要快呢,这篇文章带你梳理清楚它们的原理及不同之处!文章有一点长,看完绝对有收获!正文一、webpack基本使......
  • webpack配置
    https://www.webpackjs.com/concepts/(中文官网)给一个入口js文件,webpack会顺着此文件,找到所有依赖,然后把这些依赖打包成浏览器可识别的文件。webpack默认只能打包js文件,loader就是帮助webpack打包那些webpack默认打包不了的模块的工具1.模块化解决了全局污染,互相覆盖,早期使......
  • JS逆向实战21——某查查webpack密码加密
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!网站aHR0cHM6Ly93d3cucWNjLmNvbS8=前言阅读前请先阅读下我的另一篇文章看看别的webpack打包的网站......