webpack创建页面的过程
1、项目文件夹中创建各类型文件放置的文件夹,如:iTestingWeb文件夹下创建src dist文件夹,用途:src为源码 dist为生成后的文件放置位置,然后在源码文件夹中进一步按文件类型增加文件夹:css、js、images等文件夹
2、在src文件夹中创建一个入口index.html文件,vscode编译器使用快捷键:!+Tab方式快速创建html页面,并快捷创建一个测试代码:
3、继续在src中创建js的入口文件:main.js
4、由于会用到js文件,因此我们导入jquery:在终端中(项目文件夹)里首先运行:npm init 来初始化生成一个package.json,该文件有以下几个作用:
a、作为一个描述文件,来描述你的项目依赖了哪些包
b、允许使用“语义化”来指定项目依赖包的版本
c、更好的与其他开发者分享,便于重复使用
5、初始化npm后,开始安装依赖包:jquery:npm i jquery,安装成功后,项目文件会增加一个文件夹:node_modules来存放下来好的依赖包
6、不倡导直接在html中增加jquery的引入,因为会多一次请求,因此我们直接把jquery的引入封装到main.js入口js文件中:import $ form 'jquery' ,逻辑为:从node_modules里到处jquery.js并赋值给前端用$来接收,以后的$就代表jquery。另:import 引入模式为es6的模块引入方式。
7、因为通过import方式所以传统的解析是不支持的,因此开始引入webpack,首先要安装webpack:
运行`npm i webpack -g`全局安装webpack,这样就能在全局使用webpack的命令
8、安装完后执行命令来实现webpack的打包:
webpack src/js/main.js dist/bundle.js. 该语句的意图是:把源码的main.js文件打包成支持所有兼容的bundle.js文件来供前端访问.
9、基本的发布已经搞定,现在要简化一下,不要每次输入 src/js/main.js dist/bundle.js. 这样的入口和出口地址部分,想直接输入webpack就可以直接打包:项目根目录中增加“webpack.config.js”配置文件,然后就可以执行简易的打包命令:webpcak即可
//这个配置文件,其实就是一个js文件,通过Node中的模块操作向外暴露一个配置对象,然后命令行通过webpack命令直接被执行
module.exports = {
//配置文件中,需要手动指定入口和出口
//入口
entry: {
//表示要使用的webpack打包哪个文件
path: path.join(__dirname, './src/main.js'),
},
//出口
output: {
//指定打包好的文件输出到哪个目录里
path: path.join(__dirname, './dist'), //指定输出文件的名称
filename: 'bundle.js'
}
}
10、接下来继续延伸:如果每次修改每次都在命令行中输入webpack也是烦躁的,我们可以通过另一个工具来简化:webpack-dev-server;注意:该工具安装必须依赖本地项目要存在webpack,就是说即使已经安全的全局的webpack,也需要在项目本地再安装一遍:npm i webpack -D ;安装webpack-dev-server命令为:npm i webpack-dev-server -D,安装完毕后,当直接在命令行执行webpack-dev-server命令的时候会出现错误,原因是因为webpack-dev-server不会全局,也不应该是全局,因此如果想支持这个工具,就需要在package.json配置文件中增加脚本快捷:scripts下增加:
{
"name": "itestingweb",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack --mode development",
"build": "webpack --mode production",
"start2": "webpack-dev-server --open --port 3000 --contentBase src --hot",
"start": "webpack-dev-server --open"
},
"author": "",
"license": "ISC",
"dependencies": {
"jquery": "^3.3.1"
},
"devDependencies": {
"clean-webpack-plugin": "^0.1.19",
"css-loader": "^1.0.0",
"html-webpack-plugin": "^3.2.0",
"style-loader": "^0.21.0",
"webpack": "^4.16.4",
"webpack-cli": "^3.1.0",
"webpack-command": "^0.4.1",
"webpack-dev-server": "^3.1.5"
}
}
这样只要执行:npm run start就可以运行工具。后面的“--open”表示的是执行命令后直接打开浏览器,安装完开发者环境后,如何才能实现修改后页面自动更新?这就需要一个热更新插件:
devServer: {
//contentBase: './dist',
// 设置服务器访问的基本目录
contentBase: path.resolve(__dirname, 'dist'), //最好设置成绝对路径
// 设置服务器的ip地址,可以是localhost
host: 'localhost',
// 设置端口
port: 8090,
// 设置自动拉起浏览器
open: true,
// 设置热更新
hot: true
}
2、webpack.config.js引入webpack对象(因为热更方法在对象中)
11、目前我们可以知道bundle.js是根据webpack-dev-server这个工具将其放在了缓存中,那么是否可以将html页面也放进去?答案是肯定的,这就需要借助一个插件来实现:html-webpack-plugin ,安装命令:npm i html-webpack-plugin -D,安装好后,需要在webpack.config.js里增加配置,先导入插件
const htmlWebpackplugin = require('html-webpack-plugin');
,再在plugins里new出对象:
const path = require('path')
const htmlWebpackplugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const webpack = require('webpack'); //这个配置文件,其实就是一个js文件,通过Node中的模块操作向外暴露一个配置对象,然后命令行通过webpack命令直接被执行
module.exports = {
//配置文件中,需要手动指定入口和出口
//入口
entry: {
//表示要使用的webpack打包哪个文件
path: path.join(__dirname, './src/main.js'),
},
//出口
output: {
//指定打包好的文件输出到哪个目录里
path: path.join(__dirname, './dist'), //指定输出文件的名称
filename: 'bundle.js'
},
plugins: [
new webpack.NamedModulesPlugin(),
//new一个热更新的模块对象(步骤:1、devServer增加配置 2、引用webpack对象(const webpack = require('webpack') 3、插件数组中 new一个热启动对象 ))
new webpack.HotModuleReplacementPlugin(),
new htmlWebpackplugin({
title: 'Output Management',
template: path.join(__dirname,'./src/index.html'),
filename:'index.html'
})
],
devServer: {
//contentBase: './dist',
// 设置服务器访问的基本目录
contentBase: path.resolve(__dirname, 'dist'), //最好设置成绝对路径
// 设置服务器的ip地址,可以是localhost
host: 'localhost',
// 设置端口
port: 8090,
// 设置自动拉起浏览器
open: true,
// 设置热更新
hot: true
},
devtool: 'inline-source-map', //用于配置所有的第三方模块加载器
module:{
rules:[
//配置处理.css文件的第三方loader规则
{test:/\.css$/,use:['style-loader','css-loader']},
]
}
}
然后执行 npm run start就会自动将页面放在缓存里了,当使用了html-webpack-plugin这个插件后,就不再需要我们再手动处理js的引用了,因为这个插件已经帮我们创建了一个合适的script,并且引用了正确的访问路径,此时在html页面我们会看到:
<script type="text/javascript" src="bundle.js"></script>
这行代码。
12、此时基本的页面已经出来了,那么我们如何增加样式资源呢?
这就需要增加样式文件及其引用来处理:在css文件夹里增加一个index.css文件,比如要删除每行记录前面的点:
li{
list-style: none;
}
然后在入口js里增加css的资源引用:import './css/index.css',此时我们支持npm run start会出现错误,那是因为我们缺少两个工具:'style-loader','css-loader',如何增加:
1、先npm i style-loader -D; npm i css-loader -D
2、再在webpack.config.js里增加配置:
//用于配置所有的第三方模块加载器
module:{
rules:[
//配置处理.css文件的第三方loader规则
{test:/\.css$/,use:['style-loader','css-loader']},
]
}
}
注意:此配置中test后面的处理是依据正则表达式来进行.css文件识别的,并且:在工具加载的时候步骤是先css-loader再style-loader的从右向左的顺序执行工具加载。当加载完style-loader后,再将加载后的工具加载到webpack中用来打到调用。
13、
//在项目下,运行下列命令行
npm install --save-dev sass-loader
//因为sass-loader依赖于node-sass,所以还要安装node-sass
npm install --save-dev node-sass
webpack创建页面的过程的更多相关文章
- webpack 创建vue项目过程中遇到的问题和解决方法
目录 1 webpack简介 2 webpack实现多个输入输出多个html 3 webpack 中的module下rules 下的use和loader选项 4 webpack 文件更新,如何使页面 ...
- webpack 多页面支持 & 公共组件单独打包
webpack - 多页面/入口支持 & 公共组件单独打包 webpack系列目录 webpack 系列 一:模块系统的演进 webpack 系列 二:webpack 介绍&安装 we ...
- ASP.NET Web API 过滤器创建、执行过程(二)
ASP.NET Web API 过滤器创建.执行过程(二) 前言 前面一篇中讲解了过滤器执行之前的创建,通过实现IFilterProvider注册到当前的HttpConfiguration里的服务容器 ...
- ASP.NET Web API 过滤器创建、执行过程(一)
ASP.NET Web API 过滤器创建.执行过程(一) 前言 在上一篇中我们讲到控制器的执行过程系列,这个系列要搁置一段时间了,因为在控制器执行的过程中包含的信息都是要单独的用一个系列来描述的,就 ...
- vue+node+es6+webpack创建简单vue的demo
闲聊: 小颖之前一直说是写一篇用vue做的简单demo的文章,然而小颖总是给自己找借口,说没时间,这一没时间一下就推到现在了,今天抽时间把这个简单的demo整理下,给大家分享出来,希望对大家也有所帮助 ...
- SharePoint 2013 入门教程之创建页面布局及页面
在SharePoint的使用过程中,页面布局和页面时很重要的两个概念,主要用于数据个性化展示,下面,我们简单介绍一下SharePoint的页面布局和页面的个性化. 一. SharePoint页面模型概 ...
- 【转载】详解CreateProcess调用内核创建进程的过程
原文:详解CreateProcess调用内核创建进程的过程 昨天同学接到了腾讯的电面,有一题问到了CreateProcess创建进程的具体实现过程,他答得不怎么好吧应该是, 为了以防万一,也为了深入学 ...
- OpenCms创建网站的过程示意图——专用OpenCms人们刚开始学习
很多人听说过OpenCms,我知道它的强大,只需下载并安装,最后,我们看到了久违OpenCms,我们看到了它的简单的界面,喜悦之后,但难免困惑.如何用这个东西,我如何用它来网站,从哪里开始,无从下手. ...
- 《Webkit技术内幕》之页面渲染过程
文章同步到github<Webkit技术内幕>之页面渲染过程 最近拜读了传说中的<Webkit技术内幕>一书,有很大收获,尤其是对页面渲染有了较深的认识.由于功力有限,而且书中 ...
随机推荐
- lucene基础
同一个域中,即使相同的单词,如出现两次JAVA,也是不同的token,但他们对应相同的term,在term中记录这些token信息 数据库数据,与luence数据 需要搜寻(也即索引)的field,存 ...
- 2种方式解决vue路由跳转未匹配相应路由避免出现空白页面或者指定404页面
https://www.cnblogs.com/goloving/p/9254084.html https://www.cnblogs.com/goloving/p/9254084.html 1.路由 ...
- JAVA反射机制及理解
JAVA反射 往往当我们面对一项新的知识时,我们往往需要知道三个方面,它是什么,它能做什么,它比原有知识强在哪里,我们该怎么使用它.当你能够解决这些问题时,便意味着你已经对这项知识入门了. 首先: 反 ...
- C语言第02次作业--循环结构
1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 1- 经过这两周的学习,我深切地体会C语言非常的难(对于我而言).大部分情况都是题目不理解和没有思路,或者编译 ...
- matlab——之class类(详细总结)
https://blog.csdn.net/qinze5857/article/details/80545885 开篇:搜了一下网上介绍matlab的class类,信息不全,且总结不全面,于是单独he ...
- linux 中的 vim 设置粘贴板
https://blog.csdn.net/zhangxiao93/article/details/53677764 亲测有效
- Mac Pro 坑记录
第一天app store没法登陆,登陆后没有任何的反应,试过了改系统时间为一致.修改权限:sudo chmod -R 1777 /Users/Shared 都没什么用. 最后是终端运行: defaul ...
- day24--面向对象基础
要理解面向对象,我们首先要知道什么是面向过程 面向过程: 面向过程重点在过程两个字,神马是过程,这还要解释吗?我还是说下吧,过程就是一条线,一个步骤跟着一个步骤,更生动点的说就是像工厂里面的流水线一样 ...
- hdu4779 组合计数+dp
提交 题意:给了n*m的网格,然后有p个重型的防御塔,能承受1次攻击,q个轻型防御塔不能接受任何攻击,然后每个防御搭会攻击他所在的行和所在的列,最后求在这个网格上放至少一个防御塔的方案数, 我们枚举 ...
- 【Spark-SQL学习之三】 UDF、UDAF、开窗函数
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...