关于webpck基本使用的入门总结。
webpack版本【webpack@4.8.3】
补充:
(1)git bash新建文件的命令:touch index.html
(再别忘记了!!!)
入门
下载安装及配置(Basic Setup)
例如在桌面新建一个目录,使用npm初始化,然后利用npm命令本地安装webpack
,再安装webpack-cli
(用于在命令行上运行webpack的工具):
|
|
其中npm init -y
表示在初始化创建package.json的过程中跳过提问阶段,直接生成一个新的package.json文件,类似的npm init -f
也会跳过提问阶段。
npm初始化语法:npm init [--force|-f|--yes|-y|--scope]
在项目的根目录下,及webpack-demo下创建以下目录结构,具体目录结构及相应文件内容如下:
项目目录结构
src/index.js
|
|
index.html
|
|
修改package.json文件,增加private
字段使我们的包私有化,同时删除main
字段。这是为了防止意外发布我们的代码。更多关于package.json的内部机制见npm文档 , package.json修改如下:
package.json
|
|
index.html中的<script>
标签之间存在隐式依赖关系,index.js的运行依赖于lodash
。虽然index.js没有显式声明与lodash
的关系,但它假设全局变量 _
存在。
上述方式管理javascript项目存在的问题:
- 脚本对于外部库的依赖并不是显而易见的。(index.js没有显式声明与
lodash
的关系,假设全局变量_
存在,表明index.js调用了lodash库) - 如果依赖缺失或引入顺序有误,应用程序将无法运行。
- 如果引入的依赖并未使用,浏览器将下载不必要的代码。
接下来使用webpack来管理脚本。
创建一个捆绑(Creating a Bundle)
首先调整目录结构,将“源”代码(/src
)与“分发”代码(/dist
)分开。“源代码”是需要编写和编辑的代码,“分发”代码是构建过程的最小化和最优输出,并且最终将在浏览器中加载。修改后的目录结构如下:
目录结构
为了捆绑lodash
与index.js之间的依赖关系,需要在本地安装lodash库,命令如下:npm install --save lodash
。
注意: 安装生产环境中用到的包时,需要使用npm install --save
,开发环境时,使用npm install --save-dev
。
接下来就可以在脚本中引入lodash
,如下:
src/index.js
接下来需要更新index.html文件,首先去掉包含lodash的<script>
标签,因为在index.js文件中通过import
引入过了,然后修改另一个<script>
标签来加载捆绑代替原来的/src
文件:
dist/index.html
设置中,index.js明确要求lodash存在,并以 _
(没有全局范围污染)绑定依赖关系。通过说明模块需要什么依赖关系,webpack可以使用这些信息来构建依赖关系图,然后使用该图生成一个优化的包,其中脚本将按正确的顺序执行。
运行npx webpack
,以src/index.js
脚本作为入口点,以bundle.js
作为输出。npx
命令:需要Node 8.2或更高版本,会运行webpack的二进制文件(./node_modules/.bin/webpack
)。结果如下:
|
|
接下来在浏览器中打开index.html,如果打包成功会显示文本 ‘Hello webpack’。
注意踩坑!!! 这里照着文档一步步来,发现浏览器没有文本内容,检查后发现,在index.html文件中引入打包后的脚本文件时示例代码给的打包脚本名字为bundle.js
,但使用npx webpack
生成的打包脚本名称为main.js
,所以导致index.html文件没有正确的引入打包脚本文件。dist/index.html
修改如下:
|
|
上面的坑在英文文档中,后来看了中文文档发现中文的改过来了。。
打包后的目录结构如下:
模块(Modules)
在ES2015中import
和export
声明已经标准化,尽管大部分浏览器还不支持,但webpack支持。
webpack实际上对ES2015语法进行了转码,通过查看node_modules目录可以看到webpack通过引入babel-preset-es2015来进行ES2015语法的转码。除了import
和export
,的webpackk支持各种其他模块语法。
注意: 除了import
和export
声明,webpack不会改变其他代码,如果要使用ES2015的其他特性,请确保通过webpack loader系统使用了像babel这样的转码器。
使用一个配置文件(Using a Configuration)
在 webpack 4 中,可以无须任何配置使用,然而大多数项目会需要很复杂的设置,这就是为什么 webpack 仍然要支持 配置文件。这比在终端(terminal)中手动输入大量命令要高效的多,创建一个取代以上使用 CLI 选项方式的配置文件。
在项目根目录下创建webpack.config.js,用来配置webpack,内容如下:
|
|
通过新配置文件再次执行构建:npx webpack --config webpack.config.js
。
注意: 如果 webpack.config.js 存在,则 webpack 命令将默认选择使用它。在这里使用 --config
选项只是表明,可以传递任何名称的配置文件,这对于需要拆分成多个文件的复杂配置是非常有用。
比起 CLI 这种简单直接的使用方式,配置文件具有更多的灵活性。可以通过配置方式指定 loader 规则、插件、解析选项,以及许多其他增强功能。
NPM 脚本(NPM Scripts)
考虑到用 CLI 这种方式来运行本地的 webpack 不是特别方便,可以设置一个快捷方式,在 package.json 添加一个 npm 脚本(npm script):
现在,可以使用 npm run build
命令,来替代之前使用的 npx webpack
命令生成打包脚本。
注意: 使用 npm 的 scripts
,可以像使用 npx
那样通过模块名引用本地安装的 npm 包。这是大多数基于 npm 的项目遵循的标准,因为它允许所有贡献者使用同一组通用脚本(如果必要,每个 flag 都带有 --config
标志)。
注意: 通过向 npm run build
命令和你的参数之间添加两个中横线,可以将自定义参数传递给 webpack,例如:npm run build -- --colors
。