跟随狂神学Java-35,大前端
跟随狂神学Java-35,大前端
joker2yue跟随狂神学Java
作者:joker2yue
链接:https://github.com/Joker2Yue/Joker2Yue-Blog
来源:Github
著作权归原作者所有。商业转载请联系原作者获得授权,非商业转载请注明出处。
第三十五:大前端
“程序是为了让人类读懂,而剛好可以执行”
Nodejs
什么是Nodejs
- 一个基于Chrome V8引擎的JavaScript运行时
Nodejs入门
1 | /* |
在终端中运行
1 | node httpserver |
即可启动服务
Nodejs连接数据库
在控制台中输入
1 | npm install mysql |
即可导入mysql的依赖
1 | /* |
ES6
什么是ES6
ECMAScript 6(简称ES6)是于2015年6月正式发布的JavaScript语言的标准,正式名为ECMAScript 2015(ES2015)。它的目标是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言
let和const
ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。
let 声明的变量只在 let 命令所在的代码块内有效。
const 声明一个只读的常量,一旦声明,常量的值就不能改变。
let 命令
基本用法
1 | { |
代码块内有效
let 是在代码块内有效,var 是在全局范围内有效:
1 | { |
不能重复声明
let 只能声明一次,var 可以声明多次:
1 | let a = 1; |
for 循环计数器很适合用 let
1 | for (var i = 0; i < 10; i++) { |
变量 i 是用 var 声明的,在全局范围内有效,所以全局中只有一个变量 i, 每次循环时,setTimeout 定时器里面的 i 指的是全局变量 i ,而循环里的十个 setTimeout 是在循环结束后才执行,所以此时的 i 都是 10。
变量 j 是用 let 声明的,当前的 j 只在本轮循环中有效,每次循环的 j 其实都是一个新的变量,所以 setTimeout 定时器里面的 j 其实是不同的变量,即最后输出 12345。(若每次循环的变量 j 都是重新声明的,如何知道前一个循环的值?这是因为 JavaScript 引擎内部会记住前一个循环的值)。
不存在变量提升
let 不存在变量提升,var 会变量提升:
1 | console.log(a); //ReferenceError: a is not defined |
变量 b 用 var 声明存在变量提升,所以当脚本开始运行的时候,b 已经存在了,但是还没有赋值,所以会输出 undefined。
变量 a 用 let 声明不存在变量提升,在声明变量 a 之前,a 不存在,所以会报错。
const 命令
const 声明一个只读变量,声明之后不允许改变。意味着,一旦声明必须初始化,否则会报错。
基本用法
1 | const PI = "3.1415926"; |
暂时性死区
1 | var PI = "a"; |
ES6 明确规定,代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。代码块内,在声明变量 PI 之前使用它会报错。
注意要点
const 如何做到变量在声明初始化之后不允许改变的?其实 const 其实保证的不是变量的值不变,而是保证变量指向的内存地址所保存的数据不允许改动。此时,你可能已经想到,简单类型和复合类型保存值的方式是不同的。是的,对于简单类型(数值 number、字符串 string 、布尔值 boolean),值就保存在变量指向的那个内存地址,因此 const 声明的简单类型变量等同于常量。而复杂类型(对象 object,数组 array,函数 function),变量指向的内存地址其实是保存了一个指向实际数据的指针,所以 const 只能保证指针是固定的,至于指针指向的数据结构变不变就无法控制了,所以使用 const 声明复杂类型对象时要慎重。
模板字符串
1 |
|
默认参数
1 | <!-- |
箭头传参
1 | <!-- |
对象简写
1 | <!-- |
对象解构
1 | <!-- |
传播操作符
1 | <!-- |
输出:
1 | joker |
数组map和reduce方法的使用
map()可以将原数组中所有元素按顺序取出
reduce()
1 |
|
NPM包管理器
命令
配置
1
2
3
4
5
6
7
8
9
10
11查看 npm 的版本
npm -v //6.4.0 << 安装成功会返回版本号
查看各个命令的简单用法
npm -l
查看 npm 命令列表
npm help
查看 npm 的配置
npm config list -linit 创建模块
1
npm init
npm init
用来初始化生成一个新的package.json
文件。它会向用户提问一系列问题,如果觉得不用修改默认配置,一路回车就可以了。尾缀带
-f
(代表force)、-y
(代表yes),则跳过提问阶段,直接生成一个新的package.json
文件,不带尾缀的话,默认有提问阶段。npm set 设置环境变量
1
2
3
4
5
6
7
8npm set init-author-name 'my name jerry'
set init-author-email '12345@qq.com'
set init-author-url 'http://yourdomain.com'
npm set init-license 'MIT'
执行了以上的修改,此时 Package.json并没有发生变化
//设置后执行init才是真正修改成功
npm initnpm search 搜索模块
1
npm search <搜索词> [-g]
npm search
命令用于搜索npm仓库,它后面可以跟字符串,也可以跟正则表达式npm list 查看模块
1
2
3
4
5当前项目安装的所有模块
npm list
列出全局安装的模块 带上[--depth 0] 不深入到包的支点 更简洁
npm list -g --depth 0npm install 安装模块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23读取package.json里面的配置单安装
npm install
//可简写成 npm i
默认安装指定模块的最新(@latest)版本
npm install [<@scope>/]<name>
//eg:npm install gulp
安装指定模块的指定版本
npm install [<@scope>/]<name>@<version>
//eg: npm install gulp@3.9.1
安装指定指定版本范围内的模块
npm install [<@scope>/]<name>@<version range>
//eg: npm install vue@">=1.0.28 < 2.0.0"
安装指定模块的指定标签 默认值为(@latest)
npm install [<@scope>/]<name>@<tag>
//eg:npm install sax@0.1.1
通过Github代码库地址安装
npm install <tarball url>
//eg:npm install git://github.com/package/path.gitnpm uninstall 卸载模块
1
2
3
4
5
6
7
8卸载当前项目或全局模块
npm uninstall <name> [-g]
eg: npm uninstall gulp --save-dev
npm i gulp -g
卸载后,你可以到 /node\_modules/ 目录下查看包是否还存在,或者使用以下命令查看:
npm ls 查看安装的模块npm update 更新模块
1
2
3
4升级当前项目或全局的指定模块
npm update <name> [-g]
//eg: npm update express
npm update express -gnpm link 引用模块
1
2
3
4
5
6
7引用依赖 有些包是全局安装了,在项目里面只需要引用即可。
npm link [<@scope>/]<pkg>[@<version>]
//eg: 引用 npm link gulp gulp-ssh gulp-ftp
//eg: 解除引用 npm unlink gulp
引用模块 本人用得少没深入说了 用得上时可去翻文档例子
npm link (in package dir)npm run 执行脚本
package.json的scripts字段,可以用于指定脚本命令,供npm直接调用。npm run会创建一个Shell,执行指定的命令。
两个命令简写,start和test属于特殊命令,可以省略run,其余的都得带上run。
npm run的参数。
- 如果不加任何参数,直接运行,会列出package.json里面所有可以执行的脚本命令
npm publish 发布模块
1
2
3
4
5
6
7
8
9未注册 申请注册一个用户 直接在https://www.npmjs.com/注册一样
npm adduser
//执行后 填写几个问题 Username、Password、Email
已注册
npm login
发布
npm publish
来自整理总结:npm常用命令与操作篇 - 知乎 (zhihu.com)
Babel
什么是Babel
ES6的某些高级语法在浏览器环境甚至是Nodejs中无法执行
Babel是一个广泛使用的转码器,可以将es6代码转换为es5,从而在现有的环境中执行
安装Babel
1 | npm install -g babel-cli |
模块化
CommonJs规范
导出
1 | /* |
导入
1 | /* |
ES6规范
导出
1 | export function getList() { |
1 | export defalut{ |
导入
1 | import {getList,save} from './userApi.js'; |
1 | import user from './userApi.js' |
WebPack
是一个前端资源加载/打包工具,可以根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源
安装
1 | npm isntall -g webpack webpack-cli |
1 | webpack -v |
1 | npm isntall -save-dev style-loader css-loader |
初始化项目
创建webpack文件夹
1
npm init -y
创建src文件夹
src下创建common.js
1
2
3exports.info = function (str){
document.write(str);
}src下创建utils.js
1
2
3exports.add= function(a,b){
return a+b;
}src下创建main.js
1
2
3
4
5
6
7
8
9
10
11
12/*
* @Author: Joker_Yue,Joker_Yue@qq.com
* @Date: 2023-08-02 13:25:18
* @LastEditors: Joker_Yue
* @LastEditTime: 2023-08-02 13:26:26
* @FilePath: \webpack\src\main.js
* @Description:
*/
const common = require('./common.js');
const utils = require('./utils');
common.info('Hello world'+utils.add(100,200));
项目打包
在根目录下定义webpack.config.js文件配置打包的规则
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23/*
* @Author: Joker_Yue,Joker_Yue@qq.com
* @Date: 2023-08-02 13:29:37
* @LastEditors: Joker_Yue
* @LastEditTime: 2023-08-02 13:29:43
* @FilePath: \webpack\webpack.config.js
* @Description:
*/
// 导入path模块
const path = require('path');
// 定义JS的打包规则
module.exports = {
// 入口函数从哪里开始进行编译打包
entry:"./src/main.js",
//编译成功后把内容输出到哪里
output:{
// 定义输出的目录 __dirname为常量,当前目录的根目录。产生一个dist文件夹
path:path.resolve(__dirname,"./dist"),
// 生成bundle.js
filename:"bundle.js"
}
}执行webpck查看效果