# web-notes
**Repository Path**: wfanny/web-notes
## Basic Information
- **Project Name**: web-notes
- **Description**: web前端笔记
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-05-06
- **Last Updated**: 2021-07-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 我的前端笔记
## Version of node vs node-sass
安装node-sass
```sh
npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
```
安装指定版本node对应的node-sass
```sh
npx -p node@12.19.0 npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
```

## 思考
1. 思考一个问题,用什么方式可以把前端的管理、氛围、凝聚力做起来?
管理:
1. 制定合理的管理条例
2. 合理的沟通机制(如:定时&及时的进行沟通),促进管理者与团队成员的相互了解,从而增强团队协作能力
3. 团队内部采取`技术分享会`,`一带一`,`一带多`等方法,增强团队专业能力
4. 合理安排各成员的工作内容, 保证任务保质保量的按时完成
5. 及时发现问题,合理调整管理条例
氛围:
1. 要立一个flag,想要营造怎样的氛围?
算了,还是顺其自然吧
凝聚力:
## JavaScript笔记
### requestAnimationFrame
```js
this.navLeft = i*84
let move = 0
const animloop = () => {
move++;
this.navLeft++;
let rafId = requestAnimationFrame(animloop);
//如果left等于7, 停止动画
if(move == 17){
console.log(9999)
cancelAnimationFrame(rafId)
}
};
animloop()
```
### content-type类型
以下三种是比较常见的三种 content-type类型
* Content-Type:application/json
application/json 以json字符串的格式发送给后端 是Content-type的默认值
* Content-Type:application/x-www-form-urlencoded
x-www-form-urlencodedd是原生表单的默认请求方式,传递时数据需要处理
1.使用qs.stringify处理数据 (qs是axios自带的,无需导入)
2.URLSearchParams
3.querystring
* Content-Type:multipart/form-data
是form表单的方式提交, 一般用于文件上传
```js
let formData = new fromData()
formData.append("name", value)
```
### 解构赋值


### 对象属性命名规则

## Node笔记
### npm运行出现堆内存溢出问题
**npm运行出现堆内存溢出问题**

#### 问题原因
CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory JavaScript堆内存不足。查阅网上资料后,这里说的 JavaScript 其实就是 Node。
JavaScript 是一款拥有「自动垃圾回收」功能的编程语言。V8 作为一个 JavaScript 引擎,最初服务于 Google Chrome 浏览器的。它随着 Chrome 的第一版发布而发布以及开源。现在它除了 Chrome 浏览器,已经有很多其他的使用者了。诸如 NodeJS、MongoDB、CouchDB 等。在 Node 中通过 JavaScript 使用内存时只能使用部分内存(64位系统下约为1.4 GB,32位系统下约为0.7 GB)。如果项目十分庞大,超出了V8对于Node默认的内存最大限制,就会出现此问题。
#### 解决方案一
1. 打开一个cmd窗口
2. setx NODE_OPTIONS --max_old_space_size=8192(这个操作设置用户变量)
3. 关闭所有cmd /代码编辑器
4. 重新打开cmd并再次运行npm命令
知识点:
SETX命令:Window XP 以上的系统都自带了该命令(如果没有,下载一个Setx.exe),这种方式为永久设定环境变量。
设置用户环境变量 setx path “%JAVA_HOME%\bin”
设置系统环境变量 setx path “%JAVA_HOME%\bin” /m
使用时,应该注意:
1. setx设置环境变量后,将在新打开的终端中生效,当前终端不会立即生效。
2. setx在设置变量的长度超过1024,会截取多出的字符。
3. setx还可以操作远程计算机,具体参数设置百度一下setx用法。
4. setx在设置某一变量的值,如果已经存在该变量会覆盖之前的值。所以正确方式是:要保存值=获取当前该变量的值+新值。
#### 解决方案二
1. 打开你的工程中的package.json文件
2. 找到
```json
{
"scripts": {
"build": "node build/build.js"
}
}
```
3. 在build中加入–max_old_space_size=8192
即:
```json
{
"scripts": {
"build": "node --max_old_space_size=8192 build/build.js"
}
}
```
> 以上参考:《深入浅出Node.js》
## css笔记
### Transition,Transform闪烁问题解决办法
如果发现这些动画导致某些元素或者容器闪烁抖动时,可以使用以下方案解决:
**方法一**
可以开启浏览器**GPU硬件加速**
现在,像Chrome, FireFox, Safari, IE9+和最新版本的Opera都支持硬件加速,当它们检测到页面中某个DOM元素应用了某些CSS规则时就会开启,最显著的特征的元素的3D变换。
```css
.tran {
-webkit-transform: translate3d(200px,200px,200px)
rotate3d(200px,200px,200px,-120deg)
scale3d(0.5, 0.5, 0.5);
}
```
可是在一些情况下,我们并不需要对元素应用3D变换的效果,那怎么办呢?这时候我们可以使用个小技巧“欺骗”浏览器来开启硬件加速。
```css
.tran {
-webkit-transform: translateZ(0);
-moz-transform: translateZ(0);
-ms-transform: translateZ(0);
-o-transform: translateZ(0);
transform: translateZ(0);
/* Other transform properties here */
}
```
**方法二**
可以在使用动画属性的元素上(或发生抖动的元素上)添加如下声明:
```css
.listname{
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
/*或者*/
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
backface-visibility: hidden;
-webkit-perspective: 1000;
-moz-perspective: 1000;
-ms-perspective: 1000;
perspective: 1000;
}
```
但是有的时候一些完全不相关的元素也跟着抖动闪烁,可以在body元素上做如下声明:
```css
body {
-webkit-transform: translate3d(0, 0, 0) ;
transform: translate3d(0, 0, 0);
}
```
## docker教程
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
### 打包项目
1. 在`package.json`的同一目录创建 `Dockerfile` 文件
```dockerfile
# syntax=docker/dockerfile:1
FROM node:12-alpine
RUN apk add --no-cache python g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
```
2. 打开项目目录终端,运行如下 `docker build` 命令
```sh
docker build -t getting-started .
```
`-t`: 设置 image_name
`getting-started`: image_name
`.`: 说明在当前目录下查找 `Dockerfile` 文件 (应该可以更换指定目录)
### 启动项目
1. 使用 `docker run` 启动项目, 并指定 `image_name`, 如下:
```sh
docker run -dp 3000:3000 getting-started
```
2. 几秒后, 访问 http://localhost:3000
### 移除项目
1. 获取`ID of the container`
```sh
docker ps
```
2. 停止`container`
```sh
# Swap out with the ID from docker ps
docker stop
```
3. 移除`container`
```sh
docker rm
```
4. 使用docker面板移除项目

### 分享项目
1. 创建项目
在Docker Hub中创建一个`public repo`。
2. Push 项目
## Jenkins
Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
> CI(Continuous Integration): 持续集成, CD(Continuous Delivery): 持续交付