webpack入门——构建简易版vue-cli

用vue-cli1/2搭建一个vue项目时,可以看到有很多关于webpack配置的文件。我们不需要知道那些繁琐的配置文件有什么作用,只需在控制台输入npm run dev,项目自动启动,我们就可以愉快的写业务代码了。

虽然vue-cli帮我们做好了一切,我们就能不用学webpack了吗?NoNoNo...现代前端工程师必备的技能就是模块化构建打包项目,不信去那些招聘网站的前端JD看看。废话不多说,下面让我们用webpack构建一个简单的vue-cli。

 

第一步:安装NodeJS(webpack基于NodeJS)

下载地址:http://nodejs.cn/download/,傻瓜式安装,一直下一步就ok。安装完毕,在控制台输入node -v检查是否按照成功。

NodeJS是JavaScript的运行环境,像浏览器一样。安装之后可以通过node命令运行JavaScript代码,比如:node a.js

npm(node package manage of JavaScript)作用:Node.js下载后自带npm,类似于迅雷下载资源,可以下载项目所需的依赖模块/包。

  1. 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
  2. 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
  3. 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

    npm是国外的,可能会比较慢,建议安装cnpm,安装方法:npm install -g cnpm --registry=https://registry.npm.taobao.org

第二步:npm init初始化生成package.json

  1. 首先建立一个空的项目文件夹,
  2. 进入文件夹,shift+右击,出现【在此处打开命令窗口(W)】,
  3. 点击进入cmd控制台,命令路径即为当前文件夹目录,
  4. 然后输入npm init -y,回车,之后会在根目录创建一个package.json。

    package.json用来存放整个项目的依赖模块/包,当我们把整个项目迁移到别的地方使用时,项目运行时会根据package.json的依赖参数自动下载所需模块/包。

第三步:安装webpack

命令:npm install webpack@3.12.0 --save-dev

测试webpack在本地是否可用,webpack -v如果出现webpack为无效命令,则使用全局安装webpack:npm install webpack@3.12.0 -g。安装成功后就可以使用webpack命令玩耍了。

建议安装wepack3,webpack4对vue-cli的兼容还不是很好

webpack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其转换和打包为合适的格式供浏览器使用。

Grunt和Gulp的工作方式是:在一个配置文件中,指明对某些文件进行类似编译,组合,压缩等任务的具体步骤,工具之后可以自动替你完成这些任务。

第四步:webpack打包模块

很多文件类型,比如vue、css、img、字体...需要我们配置相应的loader才能完成正确解析并打包。

比如,把css打包到js文件中,需要安装css加载器,安装命令:npm install --save-dev style-loader css-loader
css-loader 和 style-loader,二者处理的任务不同
css-loader使你能够使用类似@import 和 url(...)的方法实现 require()的功能
style-loader将所有的计算后的样式用<style></style>加入页面中,二者组合在一起使你能够把样式表嵌入webpack打包后的JS文件中 

命令行打包(不推荐):

webpack {entry file} {destination for bundled file} // 如webpack ./js/main.js ./dist/bundle.js 自动创建dist目录

这种打包方式,在js文件中引入css文件时要注明loaderrequire('style-loader!css-loader!../css/index.css') 注意顺序不能错! 

配置文件打包(推荐):
需要在项目的根目录创建webpack.config.js.项目里配置如下:

module.exports = {entry:  __dirname + "/src/main.js",// 入口文件,可以多个 output: { path: __dirname + "/dist", // 绝对路径,打包后的文件存放的文件夹 filename: "build.js" // 相对路径,打包后输出的文件 },   // 1. 不同webpack版本配置loader的方式不同,webpack3用loaders,webpack4用rules // 2. 命令行方式引入css的require('style-loader!css-loader!../css/index.css') 就可以写成 require('../css/index.css')  module: { loaders: [ { test: /\.css$/, loader: 'style-loader!css-loader' }, { test: /\.(jpg|png|jpeg|svg)$/, loader: 'url-loader', options: { // 大于10000字节会被打包成重命名的图片资源,否则打包成base64 limit: 10000 // name: utils.assetsPath('img/[name].[hash:7].[ext]') } }, { test: /\.vue$/, loader: 'vue-loader' }, { test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/, options: { presets: ['env'], // 处理关键字,es6/7/8/9...都能转化 plugins: ['transform-runtime'] // 处理函数 } } ] } }

package.json中配置scripts:{"build": 'webpack'}webpack命令会默认运行webpack.config.js文件),执行npm run build即可打包

第五步:搭建webpack服务器

上面4步就可以完成项目的打包任务,但是开发环境还需要更进一步配置。

webpack-dev-server可以像php/java/.net...一样搭建为我们搭建一个服务器,这样就可以热更新项目代码,实现实时运行项目,进而方便我们调试项目。

    1. 安装: npm install webpack-dev-server -g
    2. 写入到依赖: npm install webpack-dev-server --save-dev
    3. 配置命令:scripts:{"dev": 'webpack-dev-server --hot --inline'} // 实现热更新和在线编译
    4. 运行命令:npm run dev
    5. 输入localhost:8080/运行... // webpack-dev-server的默认端口是8080

具体代码见:https://github.com/tzy13755126023/webpack-vue-cli

最后,webpack版本更新很频繁,各种npm包也更新很频繁,这就会导致一个兼容问题,动不动就报错,这点很让人头疼,很容易会导致从入门到放弃。

转载于:https://www.cnblogs.com/tzy1997/p/10963304.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode43. 字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2&#xff0c;返回 num1 和 num2 的乘积&#xff0c;它们的乘积也表示为字符串形式。 示例 1: 输入: num1 “2”, num2 “3” 输出: “6” 代码 class Solution {public String multiply(String num1, String num2) {if(n…

作业二:个人博客作业内容:需求分析

作业二&#xff1a;个人博客作业内容&#xff1a;需求分析 怎样与用户有效沟通获取用户的真实需求&#xff1f;访谈&#xff0c;正式访谈系统分析员将提出一些事先准备好的具体问题&#xff1b;非正式访谈中&#xff0c;分析人员将提出一些用户可以自由回答的开放性问题&#…

HBase数据备份及恢复(导入导出)的常用方法

一、说明 随着HBase在重要的商业系统中应用的大量增加&#xff0c;许多企业需要通过对它们的HBase集群建立健壮的备份和故障恢复机制来保证它们的企业&#xff08;数据&#xff09;资产。备份Hbase时的难点是其待备份的数据集可能非常巨大&#xff0c;因此备份方案必须有很高的…

react和react2_为什么React16是React开发人员的福气

react和react2by Harsh Makadia通过苛刻马卡迪亚 为什么React16是React开发人员的福气 (Why React16 is a blessing to React developers) Just like how people are excited about updating their mobile apps and OS, developers should also be excited to update their fr…

jzoj4598. 【NOIP2016模拟7.9】准备食物

一个th的题&#xff08;a gensokyo&#xff09; 难度系数在该知识点下为$2.1$ 区间xor我们很明显会想到trie树&#xff0c;将每一个区间$l~r$异或和拆成$sum[l-1]$ $sum[r]$两个数的异或 注意到二进制的性质&#xff0c;比当前低的位即使都取1加起来都没有这位选1答案高&#x…

java number转string_Java Number类, Character类,String类

字符串在Java编程中广泛使用&#xff0c;字符串就是一系列字符(由一个个的字符组成)。 在Java编程语言中&#xff0c;字符串被视为对象。Java平台提供String类来创建和操作字符串。1. 创建字符串创建字符串的最直接方法是 -String str "Hello world!";每当它在代码中…

Android商城开发系列(二)——App启动欢迎页面制作

商城APP一般都会在应用启动时有一个欢迎界面&#xff0c;下面我们来实现一个最简单的欢迎页开发&#xff1a;就是打开商城App&#xff0c;先出现欢迎界面&#xff0c;停留几秒钟&#xff0c;自动进入应用程序的主界面。 首先先定义WelcomeActivity布局&#xff0c;布局非常简单…

DELL安装不了mysql_Windows 版本 Mysql 8.x 安装

1、官网下载安装包百度网盘链接&#xff1a;https://pan.baidu.com/s/1cFRbQM5720xrzMxbgjPeyA提取码&#xff1a;xlz72、解压安装包并新建一个文件夹作为安装目录(mysqlInstall)3、配置 Mysql 环境变量4、在解压好的目录下新建一个 my.ini 文件(注意&#xff1a;my.ini 文件和…

lambda 使用_如何使用Lambda和API网关构建API

lambda 使用Do you want to access your database, control your system, or execute some code from another website? An API can do all of this for you, and they’re surprisingly easy to set up.您是否要访问数据库&#xff0c;控制系统或从其他网站执行一些代码&…

Hyper-V Server联机调整虚拟硬盘大小

1. 技术概述&#xff1a; 从 Windows Server 2012 R2开始&#xff0c;管理员可以在运行虚拟机的同时&#xff0c;使用 Hyper-V 来扩展或压缩虚拟硬盘的大小。存储管理员可以通过对运行中的虚拟硬盘执行维护操作来避免代价不菲的停机。不再需要关闭虚拟机&#xff0c;这可以避免…

leetcode162. 寻找峰值(二分法)

峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums&#xff0c;其中 nums[i] ≠ nums[i1]&#xff0c;找到峰值元素并返回其索引。 数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回任何一个峰值所在位置即可。 你可以假设 nums[-1] nums[n] -…

python网络爬虫(5)BeautifulSoup的使用示范

创建并显示原始内容 其中的lxml第三方解释器加快解析速度 import bs4 from bs4 import BeautifulSoup html_str """ <html><head><title>The Dormouses story</title></head> <body> <p class"title"><…

Mingw编译DLib

Mingw编译DLib 因为机器上安装了qt-opensource-windows-x86-mingw530-5.8.0&#xff0c;所以准备使用其自带的mingw530来编译DLib使用。 因为DLib使用CMake的构建脚本&#xff0c;所以还请先安装好CMake。 cmake的下载地址如下https://cmake.org/files/v3.7/cmake-3.7.2-win64-…

探索JavaScript的关闭功能

Discover Functional JavaScript was named one of the best new Functional Programming books by BookAuthority!“发现功能JavaScript”被BookAuthority评为最佳新功能编程书籍之一 &#xff01; A closure is an inner function that has access to the outer scope, even…

QueryList 配置curl参数 的文档位置 QueryList抓取https 终于找到了

需要设置ssl证书&#xff0c;或者不验证证书&#xff0c;例&#xff1a;$ql QueryList::get(https://...,[],[verify > false]);设置这个 verify > false , 所以curl的其他参数就在这里配置即可 文档在 https://guzzle-cn.readthedocs.io/zh_CN/latest/request-optio…

leetcode981. 基于时间的键值存储(treemap)

创建一个基于时间的键值存储类 TimeMap&#xff0c;它支持下面两个操作&#xff1a; set(string key, string value, int timestamp) 存储键 key、值 value&#xff0c;以及给定的时间戳 timestamp。 2. get(string key, int timestamp) 返回先前调用 set(key, value, times…

物联网笔记

转载于:https://www.cnblogs.com/16-C-kai/p/6596682.html

关于大学生玩网络游戏的调查问卷

1.创建问卷&#xff0c;输入调查名称 2编辑问卷 3检查问卷&#xff0c;是否有误 4.提交并发布问卷 5分享问卷 6.问卷分析 转载于:https://www.cnblogs.com/dzw1996/p/7786754.html

java自动排序_java ArrayList自动排序算法的实现

前几天写的那个是错误的&#xff0c;在这里将正确的更新。。。通过实现ComParator接口&#xff0c;并且对Compare函数进行重写&#xff0c;自定义排序规则实现对ArrayList中对象的排序。。Student类定义&#xff1a;通过右键-》source-》自动生成Set和get方法package first;imp…

1到100的二进制编码_每天经过100天的编码后,我学到了什么

1到100的二进制编码Eleftheria Batsou is a web developer from Thessaloniki, Greece. She gave a talk at the Codegarden conference about her experience doing a solid 100 days of coding every day as part of the #100DaysOfCode Challenge.Eleftheria Batsou是来自希…