webpack4.x开发环境配置详解


Posted in Javascript onAugust 04, 2018

本文实例讲述了webpack4.x开发环境配置方法。分享给大家供大家参考,具体如下:

写这篇文章的初衷在于,虽然网络上关于webpack的教程不少,但是大多已经过时,由于webpack版本更新后许多操作变化很大,很多教程的经验已经不适合。当我们使用npm安装webpack时,若不指定webpack的版本,将默认安装最新版,笔者测试时默认安装的是4.1.1,并不能照搬老教程的方法。为此,笔者进行了最新版配置的探索,使用的是windows操作系统,如果你的是webpack4.x版本,可参考进行配置。

注意:本文并不是直接把正确步骤放上去,而是分析了各种报错情况及原因,文章的步骤显得绕弯子。如果仅仅想看正确步骤,建议直接看第八点的配置步骤再返回查找各步骤的操作。

一、全局安装webpack

如果我们按照旧版本的安装方式,直接使用npm全局安装webpack,我们预期全局安装webpack后,便能在命令行中使用webpack指令。我们在命令行输入:

npm install -g webpack

当执行该操作后,便在C:\Users\你的用户名\AppData\Roaming\npm\node_modules创建了webpack文件夹,里面存储了刚刚全局安装的webpack模块。

二、创建项目

我们在合适位置新建一个文件夹webpack-test,用于存放我们的项目。
命令行中定位到webpack-test文件夹下,输入以下命令进行项目的初始化:

npm init

这里,要求设置很多选项,可以按项目情况配置也可以不填直接回车。完成后,我们发现文件夹中增加了package.json文件,它用于保存关于项目的信息。

三、尝试打包出现提示

我们在项目根目录新建一个文件hello.js,并在其中输入代码:

function hello(str) {
  alert(str);
}
hello('hello world!');

然后,我们便可以满怀期待地尝试打包,在命令行输入:

webpack hello.js bundle.js

意思是将hello.js打包成另一个文件bundle.js。但很不幸,4.1.1版本会提示:

The CLI moved into a separate package:webpack-cli.
Please install 'webpack-cli' in addition to webpack itself to use the CLI.
->when using npm: npm install webpack-cli -D
->when using yarn: yarn add webpack-cli -D

翻译成中文:

CLI(命令行工具)已经转移到了一个单独的包webpack-cli中。
除了webpack自身外,请额外安装webpack-cli来使用CLI。
-> 使用npm安装:npm install webpack-cli -D
->使用yarn安装:yarn add webpack-cli -D

意思是,我们需要额外安装webpack-cli,否则便不能在命令行中使用webpack的相关命令。

四、安装webpack-cli

我们在项目中本地安装webpack-cli

npm install webpack-cli -D

这里-D参数和?save-dev的作用相同,只是一种简写而已。笔者这里安装完成后,显示webpack-cli版本是2.0.10。

我们在根目录再次输入:

webpack hello.js bundle.js

很不幸,还是提示:

The CLI moved into a separate package:webpack-cli.
Please install 'webpack-cli' in addition to webpack itself to use the CLI.
->when using npm: npm install webpack-cli -D
->when using yarn: yarn add webpack-cli -D

这表明我们本地安装webpack-cli后并没有起作用,在命令行中依然不能使用webpack命令。那么是什么地方出了问题呢?
我们不难想到,

旧版本的webpack中,webpack指令要能在命令行中使用,需要全局安装webpack,而不是本地安装,因此这里的webpack-cli也应该是同理。

我们卸载本地安装的webpack-cli,全局安装webpack-cli:

npm uninstall webpack-cli
npm install -g webpack-cli

五、设置模式

我们再次尝试打包:

webpack hello.js bundle.js

看样子似乎是可以运行了,但又出现了新的提示:

WARNING in configuration
The 'mode' option has not been set. Set  'mode' option to 'development' or 'production' to enable defaults for this enviroment.
ERROR in multi ./hello.js bundle.js
Module not found:ERROR:Can't resolve 'bundle.js' in 'C:/Users/你的用户名/Desktop/webpack-test'
@ multi ./hello.js bundle.js

翻译成中文:

配置警告:
“mode”选项尚未设置。将“mode”选项设为“development”或“production”以启用此环境的默认设置。
multi错误 ./ hello.js bundle.js
未发现模块:错误:无法解析'C:/Users/你的用户名/Desktop/webpack-test'中的bundle.js
@ multi ./hello.js bundle.js

这里提示我们存在的第一个问题是没有配置webpack的mode选项,默认有production和development两种模式可以设置,因此我们尝试设为development模式,在命令行输入:

webpack --mode development

我们看到进行了打包并显示了Hash、Version、Time、Build at信息,表明已经可以打包。不过,仍然有错误提示:

ERROR in Entry module not found:ERROR:Can't resolve './src' in 'C:/Users/你的用户名/Desktop/webpack-test'

翻译成中文:

未找到入口模块发生错误:错误:无法解析'C:/Users/你的用户名/Desktop/webpack-test'中的'./src'

六、创建入口文件

这表明webpack4.x是以项目根目录下的'./src'作为入口,但我们的项目中缺乏该路径,因此我们在根目录下创建src文件夹,事实上webpack4.x'./src/index.js'作为入口,单单创建src文件而没有index.js文件仍然会报错,因此我们

hello.js移动到'./src',并重命名为index.js

现在如果我们再次执行

webpack index.js bundle.js

会提示can.t resolve相关的错误。

原因是,webpack4.x的打包已经不能用webpack 文件a 文件b的方式,而是直接运行webpack --mode development或者webpack --mode production,这样便会默认进行打包,入口文件是'./src/index.js',输出路径是'./dist/main.js',其中src目录即index.js文件需要手动创建,而dist目录及main.js会自动生成。

因此我们不再按webpack 文件a 文件b的方式运行webpack指令,而是直接运行

webpack --mode development

或者

webpack --mode production

这样便能够实现将'./src/index.js'打包成'./dist/main.js'

不过每次都要输入这个命令,非常麻烦,我们在package.json中scripts中加入两个成员:

"dev":"webpack --mode development",
 "build":"webpack --mode production"

以后我们只需要在命令行执行npm run dev便相当于执行webpack --mode development,执行npm run build便相当于执行webpack --mode production

我们在根目录执行:

npm run dev

可以看到根目录下生成了dist目录,并且dist目录下生成了main.js文件,main.js文件已经打包了src目录下index.js文件的代码。

七、配置其他参数

我们如果需要配置webpack指令的其他参数,只需要在webpack ?mode production/development后加上其他参数即可,如:

webpack --mode development --watch --progress --display-modules --colors --display-reasons

当然,这也可以写入package.json的scripts之中。

八、总结

我们可以将以上探索进行整理总结,首先是注意事项:

1、webpack-cli必须要全局安装,否则不能使用webpack指令;
2、webpack也必须要全局安装,否则也不能使用webpack指令。
3、webpack4.x中webpack.config.js这样的配置文件不是必须的。
4、默认入口文件是./src/index.js,默认输出文件./dist/main.js。

配置步骤:

1、创建工程目录;
2、初始化工程目录:npm init。
3、全局安装webpack-cli。
4、全局安装webpack。
5、webpack ?mode development/production进行打包,可在package.json中配置dev和build的脚本,便只需运行npm run dev/build,作用相同。
6、在webpack ?mode development/production可串联设置其他参数。

希望本文所述对大家基于webpack的前端程序设计有所帮助。

Javascript 相关文章推荐
js表格分页实现代码
Sep 18 Javascript
IE之动态添加DOM节点触发window.resize事件
Jul 27 Javascript
javaScript 计算两个日期的天数相差(示例代码)
Dec 27 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
Feb 08 Javascript
jQuery结合CSS制作动态的下拉菜单
Oct 27 Javascript
prototype框架中美元符号$用法分析
Jan 22 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
Apr 25 jQuery
angularjs实现天气预报功能
Jun 16 Javascript
Vue.js递归组件构建树形菜单
Dec 24 Javascript
浅析Vue.js 中的条件渲染指令
Nov 19 Javascript
JavaScript刷新页面的几种方法总结
Mar 28 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
Sep 11 Javascript
微信小程序实现收藏与取消收藏切换图片功能
Aug 03 #Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
Aug 03 #Javascript
mpvue跳转页面及注意事项
Aug 03 #Javascript
JavaScript高级函数应用之分时函数实例分析
Aug 03 #Javascript
mpvue小程序仿qq左滑置顶删除组件
Aug 03 #Javascript
JavaScript中call和apply方法的区别实例分析
Aug 03 #Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
Aug 03 #Javascript
You might like
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
一个基于PDO的数据库操作类(新) 一个PDO事务实例
2011/07/03 PHP
ThinkPHP实现分页功能
2017/04/28 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
使用IE6看老赵的博客 jQuery初探
2010/01/17 Javascript
高性能web开发 如何加载JS,JS应该放在什么位置?
2010/05/14 Javascript
基于jQuery的动态表格插件
2011/03/28 Javascript
关于ExtJS4.1:快捷键支持的问题
2013/04/24 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
javascript中的window.location.search方法简介
2013/09/02 Javascript
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
Jquery在指定DIV加载HTML示例代码
2014/02/17 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
2014/03/27 Javascript
javascript面向对象之访问对象属性的两种方式分析
2015/01/13 Javascript
JS实现支持多选的遍历下拉列表代码
2015/08/20 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
2016/02/12 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
python生成多个只含0,1元素的随机数组或列表的实例
2018/11/12 Python
Django 创建新App及其常用命令的实现方法
2019/08/04 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
英国床垫和床架购物网站:Bedman
2019/11/04 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
会计师事务所审计实习自我鉴定
2013/09/20 职场文书
手术室护士自我鉴定
2013/10/14 职场文书
中医专业职业生涯规划书范文
2014/01/04 职场文书
GMP办公室主任岗位职责
2014/03/14 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书