webpack解析(1)
webpack是为现代js程序准备的静态模块打包工具
一:关于对webpack的理解
可以将其认为是一个电脑主板,由于使用js作为源码,因而其可以默认编译js代码(别种类型的文件可以依靠loaders或plugins),因为其底层由node提供支持,因而其支持编译common/esmodule的导入方式。而其被三大框架使用的原因是生态————提供了近乎所有文件的编译工具,这也使得webpack对整个前端工程的支持近乎全面。
二:安装
想要安装使用webpack,应首先确保安装node
截至当前,webpack更新到了5,笔者也使用的webpack5,node最低需12.x.x,可以命令行下使用node -v查看node版本
命令行下输入以下命令:
//全局安装
npm install webpack webpackcli -g
//局部安装(推荐)
npm install webpack webpackcli -D
- 问题1:推荐局部安装的原因
有时候可能项目的webpack版本不同,不同的webpack可能会存在不兼容
- 问题2:为什么要安装webpackcli,
webpackcli并不是必需的,三大框架并没有安装webpackcli,安装webpackcli是由于当前命令行里需要webpackcli执行webpack内的命令且需要一些参数时,换句话说,此刻webpack需要webpackcli执行带参数的 命令,而webpackcli又依赖webpack(互相依存)
读者也可以指定webpack版本:
// 如:npm install webpack@3.6.0
npm install webpack@xxxxx
三:尝试写一个小demo
- 如果全局安装了webpack:
全局环境下,webpack命令可以在任一目录中使用
为演示webpack同时支持es6导入导出和common导入导出,以下两个非index.js文件使用两种方式
新建项目目录:
—mydemo
______src
——————__index.js
——————__common.js
——————__esmodule.js
——————index.html
//common.js
// node的导出流
const common_export = function(){
return '我是node的导出流'
}
module.exports = {
common_export
}
//esmodule.js
// es6的导出流
export function es_export(){
return '我是esmodule的导出流'
}
// index.js
import { es_export } from './esmodule'
const { common_export } = require('./common')
console.log(es_export(),common_export());
此时可以在mydemo目录命令行下输入webpack
即可生成一个dist目录,且内部生成一个main.js的文件,即如今项目结构显示如下:
—mydemo
______dist
——————__main.js
______src
——————__index.js
——————__common.js
——————__esmodule.js
——————index.html

假设读者有live-server这个插件且index.html中引入了./dist/main.js这个文件,在live on browers以后控制台会出现打印消息:

此时可以做个总结:
- webpack天然支持js的两种导入导出流
- 在输入webpack后会默认将当前目录下src目录中的index.js作为入口,且会默认在当前目录下生成dist目录并将打包后的js文件合并成./dist/main.js
- webpack天然支持生成静态文件,只需在index.html中引用打包后的main.js文件即可
- 局部使用
局部环境下,想要执行webpack命令,需要将webpack作为node中的一个包使用,此时,需要使用npm包管理器,换句话说,需要node支持
想要使用node环境,需要使用
npm init命令生成package.json目录,这个目录记录当前npm的一些信息,可以在这里查看已安装的包目录
如果目录中有中文名,可以使用npm init -y命令,这是由于node对中文的支持并不好
注:于全局目录此时保持一致
- 在新建目录下进行npm初始化
npm init -y - 下载webpack包
npm install webpack -D
-D是指开发时要用到的依赖,-S是生产环境也要用到的依赖
如果此时package.json中显示有webpack包名,则说明局部安装成功

注意:此时此刻想要打包文件,不应使用webpack命令,因为一但使用webpack命令,则会使用全局的webpack进行打包————这与初衷不符
如何使用局部webpack命令打包项目?
- 可以使用.bin
使用.bin默认查找node-module下的webpack
.\node_modules\.bin\webpack
- 使用npx
使用npx将优先使用局部webpack,同方法1一样
npm webpack
- package.json的script字段中,使用命令(推荐使用)

如果是这种方式,可以使用npm run build命令,此时将默认执行局部的webpack命令(本质上,所有局部查找的命令都是查找node-modules里的安装的包并且运行这个包)
下一记:webpack本身的配置以及其loader配置
webpack解析(1)的更多相关文章
- 前后端分离之vue2.0+webpack2 实战项目 -- webpack介绍
webpack的一点介绍 Webpack 把任何一个文件都看成一个模块,模块间可以互相依赖(require or import),webpack 的功能是把相互依赖的文件打包在一起.webpack 本 ...
- webpack核心概念
一.webpack四个核心概念 1.入口[Entry] webpack将创建所有应用程序 依赖关系图表.图表的起点被称之为 入口起点.入口起点告诉webpack从哪里开始,并遵循着依赖关系图表知道打包 ...
- 搭建一个属于自己的webpack config(-)
搭建一个属于自己的webpack config(-) 前期准备 环境说明 mac 10.12.6 node v8.8.1 npm 5.4.2 全局安装下webpack.webpack-dev-serv ...
- webpack入门(六) API in modules
A quick summary of all methods and variables available in code compiled with webpack. 用webpack编译的一些变 ...
- webpack入门(四)webpack的api 2 module
接着介绍webpack的module. module Options affecting the normal modules (NormalModuleFactory) 这些选项影响普通的模块 m ...
- webpack入门(三)webpack的api
终于到了webpack api这一篇,我都等不及了0.0; webpack is fed a configuration object. Depending on your usage of webp ...
- vue2+webpack 开发环境配置
前提条件: 1.安装node.js https://nodejs.org/en/ 下载安装合适的平台 2.安装npm 第一步:初始化项目 新建文件夹 E:\app 推荐vue项目目录结构: confi ...
- 一字一句的搞懂vue-cli之vue webpack template配置
webpack--神一样的存在.无论写了多少次,再次相见,仍是初见.有的时候开发vue项目,对尤大的vue-cli感激涕零.但是,但是,但是...不是自己的东西,真的很不想折腾.所以,我们就得深入内部 ...
- Webpack知识汇总
介绍 webpack把任何一个文件都看成是一个模块,模块间可以相互依赖(require or import),webpack的功能就是把相互依赖的文件打包在一起.webpack本身只能处理原生的Jav ...
随机推荐
- Java中的IO流 - 入门篇
前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的IO流-入门篇>,希望对大家有帮助,谢谢 由于Java的IO类有很多,这就导致我刚开始学的时候,感觉很乱,每次用到都是上网搜,结果 ...
- java例题_42 求满足809*??=800*??+9*??+1的??的值
1 /*42 [程序 42 求数字] 2 题目:809*??=800*??+9*??+1 3 其中??代表的两位数,8*??的结果为两位数,9*??的结果为 3 位数.求??代表的两位数,及 809* ...
- Elasticsearch 主节点和暖热节点解析
Elasticsearch 主节点和暖热节点解析 主节点 控制整个集群,进行一些轻量级操作,列如:跟踪哪些节点是集群中的一部分,决定节点分片分配,负责集群健康, 不包含数据,也不参与搜索和索引操作,对 ...
- Linux(六):系统运维常用命令
实际的生产环境下,不论是研发还是运维,或多或少的得面对在linux上定位问题这个关卡,这里介绍一下linux环境下一些状态查看常用的命令. 系统资源监控 总体资源占用情况查看 命令:top 像wind ...
- 关于Vim/Neovim/SpaceVim的一些思考
1 前言 最近看到了Neovim以及SpaceVim,于是上手试了一下. 2 Neovim与SpaceVim Neovim是Vim的一个分支,具有更加现代的GUI.嵌入式以及脚本化的终端.异步工作控制 ...
- 解决CentOS虚拟机无法显示本地IP问题
1 问题描述 CentOS虚拟机无法显示本地ip,如图: 2 尝试过的方法 参考过此处的解决方法,把网卡配置中的ONBOOT修改为YES: 但是原来的网卡配置也是YES,所以修改的方法没有用,尝试了一 ...
- (十五)VMware Harbor 标签管理
1. Harbor提供两种标签用来隔离各种资源(目前只有镜像): 全局级别标签: 由系统管理员管理,用于管理整个系统的镜像.它们可以添加到任何项目下的镜像中. 项目级别标签: 由项目管理员或者系统管理 ...
- TLS Poison - When TLS Hack you
0x00 前言 本次学习的是2020 Blackhat 的一篇文章When TLS Hacks you,简单来说,作者提出了一种新的SSRF攻击思路:利用DNS重绑定和TLS协议的会话恢复进行攻击.具 ...
- 浅谈synchronized和volatitle实现线程安全的策略
什么是线程不安全 我对线程安全的理解就是多个线程同时操作一个共享变量时会产生意料之外的情况,这种情况就是线程不安全.注意:只有写操作才可能出现线程不安全,对共享变量只进行读操作线程是绝对安全的. 具体 ...
- k8s ingress-nginx
转载自https://blog.csdn.net/bjwf125/article/details/104663542/ Kubernetes系列之Kubernetes使用ingress-nginx作为 ...