[ webpack4 ] 配置属于本身的打包系统教程(一)—— 基础配置篇

GitHub 完整配置文件地址: https://github.com/yhtx1997/webpack4-Instancejavascript

因为篇幅过长分三次发布,建议按顺序看html

基础配置篇

主要内容java

  • 安装 webpack4
  • 目录初始化
  • 配置初始化
  • 入口及多入口配置
  • 出口配置

安装 webpack4

安装 webpack 前请确保已安装 nodejs 和 npmnode

新建 npm 项目

npm init -y
复制代码

这里的init表示初始化一个 npm 项目, -y 表示所有选 yes,不加的话会提示输入一些项目信息,好比项目名,版本号,做者...webpack

安装 webpack4

npm install webpack webpack-cli webpack-dev-server -D
复制代码

这实际上是一条合并的命令,拆开就是git

npm install webpack -D
npm install webpack-cli -D
npm install webpack-dev-server -D
复制代码
  • install 是安装的意思; -D 表示安装到本地开发环境,不使用全局安装是由于每一个项目可能用的 webpack 版本不同致使冲突
  • 第一条安装的是 webpack 的核心文件,就比如是安装包
  • 第二条是让 webpack 支持相似 npm run dev 这种命令行命令
  • 第三条安装的是可使 webpack 支持实时编译的拓展包

初始化 npm 配置及文件

现阶段的目标是让它能运行起来
如今目录下应该有一个文件夹,两个 .josn 文件es6

初始目录

  • node_modules 用来存放全部安装的 npm 包
  • package.json 在这里配置 npm run 的脚本,以及包含项目信息,安装了哪些包
  • package-lock 详细的包的版原本源,确保项目全部开发人员用的都是一个版本

调整 package.json

官方推荐移除文件中的入口配置,这样能够防止意外发布你的代码。github

"main": "index.js"
复制代码

并加上私有属性配置web

"private": true
复制代码

运行webpack 能够用在命令行输入 npx webpack
可是这样的运行方式在配置了开发环境和生产环境时,再运行须要写不少参数
因此添加一个 npm 脚本,以后运行 输入 npm run test 便可,有参数后在后边追加便可算法

"test": "webpack"
复制代码

最后看起来像这样

初始package

新建入口文件及生成出口文件

在 webpack 4 中,能够无须任何配置使用,作完上边的操做后能够在命令行输入 npm run test 运行 webpack(这里的 test 是在上边 scripts 里本身定义的),可是会显示这样的结果。

图片描述

这是由于入口文件不存在,webpack 默认是将当前目录下的 ./src/index.js 当作要打包的文件(入口),新建一下 src 目录和 index.js 文件,就能够正常了。

clipboard.png

这时会生成一个 dist 目录以及目录里有一个 main.js,这是默认的打包好的文件及目录(出口),这样一个 webpack 算是初始化完成了。

clipboard.png
clipboard.png

注:

  • 最终发布时若是只须要一个 js,那么开发时 index.js 里推荐是只用来引入其余 js 文件(import)。
  • 在截止 2018年12月31日 据我所知道的目前 import 和 export 还只是概念上的标准, js 还不能原生支持 import 和 export ,你们能使用是由于配置了 babel ,经过 babel 进行编译,使其变成 node.js 的代码,使其能够将这条命令视为加载模块。 nodejs 采用 CommonJS规范,关于 ES6 这方面的能够看 ES6 Module 的语法

webpack4 入口出口配置

在上面也说了 webpack4 如今能够无需使用任何配置文件就可使用,可是有些东西仍是弄成本身喜欢的比较好

新建配置文件

在当前目录下新建一个 webpack.config.js 文件,并写入代码

const path = require('path');//[1]

module.exports = {
    //[2]
};
复制代码
  • 1 是引入 node 的 path 模块,这样就能够处理文件与目录的路径,处理路径是由于 windows 系列和 Linux 系列在路径的表示上不太同样。
  • 2 是对外暴露大括号 {} 中的内容,用来写咱们自定义的配置
  • 注:关于配置文件名,wepack4 默认是会引入 ./webpack.config.js ,若是想本身更名字的话能够在命令行输入一下代码,其中 webpack --config 是必须的, my.config.js 是本身自定义的配置文件的路径
webpack --config my.config.js
复制代码

入口配置

为了能证实入口确实改了有效果,我将 ./src/index.js 的文件名改成 2048.js,并放到./src/js/2048.js ; 并修改代码

const path = require('path');

module.exports = {
    entry: "./src/2048.js"//add
};
复制代码

在不加上面代码时会报以前的找不到入口的错误,加了之后会显示正常输出了,而且 ./dis 下会多一个 2048.js 的文件,

clipboard.png

多入口配置

entry 不光能赋值绝对路径的字符串,还能赋值多个路径的数组或对象

entry: './src/2048.js'//单入口 字符串传参

entry: ['./src/js/2048.js','./src/js/1024.js','./src/js/512.js']//多入口 数组传参

entry: {//多入口 对象传参
    2048: './src/js/2048.js',
    1024: './src/js/1024.js',
    512: './src/js/512.js'
  }
复制代码

出口配置

出口跟入口不太同样,入口能够有不少,可是只有一个输出配置。

output: {
    filename: '2048.js',
    path: 'C:/Users/GengShaojing/Desktop/2048/dist'
}
复制代码
  • filename 打包后文件的文件名。
  • path 打包后文件的的绝对路径。

多入口多输出文件

output: {
    filename: '[name].js',//[1]
    path: path.resolve(__dirname, 'dist')//[2]
}
复制代码
  • 1 [name] 表示使用 entry 传递过来的文件的文件名或者对象的 key 值
  • 2 __dirname 指向当前文件(webpack 配置文件)的绝对路径, path.resolve 是解析路径并在路径后加上 dist
每次修改后生成不同的文件名
output: {
    filename: "[name].[chunkhash].js",
    path: path.resolve(__dirname, 'dist')
}
复制代码

filename 支持如下几个属性,且能够共存

  • [name] 模块名称 就是以前说的文件名或者对象的 key 值

  • [id] 模块标识符 应该是入口传入顺序的下标值从 0 开始

  • [hash] 模块标识符的哈希值 这个我理解的不太清楚,只知道他能够生成字符串

  • [chunkhash] 内容的哈希值 根据内容生成字符串

  • [contenthash] 提取的内容生成的哈希值 根据提取的内容生成字符串

  • 注:官方推荐 [name] 加上 [chunkhash] 的模式

  • 注:哈希值就是用算法提取的标识信息,至关于人和录入指纹,哈希值就是人录入指纹的机器,最后的字符串就是指纹

相关文章
相关标签/搜索