diff --git a/.vitepress/config copy1.mts b/.vitepress/config copy1.mts deleted file mode 100644 index 9e26293..0000000 --- a/.vitepress/config copy1.mts +++ /dev/null @@ -1,50 +0,0 @@ -import { defineConfig } from 'vitepress'; - - -let nav = [ - { text: '首页', link: '/' }, - { text: '前端', link: '/frontend' }, - { text: '后端', link: '/backend' } -] - -// https://vitepress.dev/reference/site-config -export default defineConfig({ - title: "joey998的博客", - description: "github,个人博客", - srcDir: './src', - - themeConfig: { - // https://vitepress.dev/reference/default-theme-config - nav, - - aside: true, - - sidebar: { - "/frontend/": [ - { - text: 'javascript', - items: [ - { text: 'Index', link: '/guide/' }, - { text: 'One', link: '/guide/one' }, - { text: 'Two', link: '/guide/two' } - ] - }, - { - text: 'vue' - }, - { - text: 'react', - items: [ - { text: 'Index', link: '/guide/' }, - { text: 'One', link: '/guide/one' }, - { text: 'Two', link: '/guide/two' } - ] - } - ] - }, - - socialLinks: [ - { icon: 'github', link: 'https://github.com/vuejs/vitepress' } - ] - } -}) diff --git a/.vitepress/config.mts b/.vitepress/config.mts index 9732e1a..37e5045 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -1,15 +1,14 @@ import { defineConfig } from 'vitepress'; -import { getNavAndSideBarInfo } from '../refreshConfig.data' -import { writeFileSync } from 'fs'; +import { getNavAndSideBarInfo } from '../src/refreshConfig.data'; let configInfo = getNavAndSideBarInfo(); -writeFileSync("./.out.json", JSON.stringify(configInfo)) + // https://vitepress.dev/reference/site-config export default defineConfig({ title: "joey998的博客", description: "github,个人博客", srcDir: './src', - base: '/my-site/', + base: '/blog/', themeConfig: { // https://vitepress.dev/reference/default-theme-config diff --git a/src/backend/cccc.vue b/src/backend/cccc.vue deleted file mode 100644 index 37e2290..0000000 --- a/src/backend/cccc.vue +++ /dev/null @@ -1,18 +0,0 @@ - - - \ No newline at end of file diff --git a/src/backend/ddd copy.md b/src/backend/ddd copy.md deleted file mode 100644 index 210fb9c..0000000 --- a/src/backend/ddd copy.md +++ /dev/null @@ -1,13 +0,0 @@ -## 问题 - -1. 描述 -```js -console.log(12); // dfas -``` - - - - \ No newline at end of file diff --git a/src/backend/index.md b/src/backend/index.md index 6be318c..7722181 100644 --- a/src/backend/index.md +++ b/src/backend/index.md @@ -1,13 +1 @@ -## 问题back - -1. 描述 -```js -console.log(12); // dfas -``` - - - - \ No newline at end of file +后端问题 \ No newline at end of file diff --git "a/src/backend/linux/git-ssh\350\277\236\346\216\245.md" "b/src/backend/linux/git-ssh\350\277\236\346\216\245.md" new file mode 100644 index 0000000..9c8c1b4 --- /dev/null +++ "b/src/backend/linux/git-ssh\350\277\236\346\216\245.md" @@ -0,0 +1,33 @@ +--- +title:git的ssh连接方式 +--- + +1. 在服务端使用`git init --bare bareDirectory`,或者新建一个`bareDirectory`,然后`cd`进去输入`git init --bare` + **note**:这里面需要使用到`--bare`参数,否则当在客户端提交时,客户端会报错 + ``` + remote: error: refusing to update checked out branch: refs/heads/master + remote: error: By default, updating the current branch in a non-bare repository + remote: error: is denied, because it will make the index and work tree inconsistent + remote: error: with what you pushed, and will require 'git reset --hard' to match + remote: error: the work tree to HEAD. + remote: error: + remote: error: You can set 'receive.denyCurrentBranch' configuration variable to + remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into + remote: error: its current branch; however, this is not recommended unless you + remote: error: arranged to update its work tree to match what you pushed in some + remote: error: other way. + remote: error: + remote: error: To squelch this message and still keep the default behaviour, set + remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'. + To 121.42.12.48:/home/git/project/testDirectory/ + ``` + **上面也提到了可以通过在服务端`git config receive.denyCurrentBranch ignore`来解决,但是不推荐** + +2. 服务端克隆仓库 + ``` + git clone git@123.12.123.12:/home/git/bareDirectory + git clone ssh://git@123.12.123.12:2222/home/git/bareDirectory + # ssh链接方式为 + 1, 用户名@IP地址:文件夹绝对路径 (此种方法默认是22端口,:后面的为绝对路径) + 2, ssh://用户名@IP地址:端口号+绝对路径 + ``` \ No newline at end of file diff --git "a/src/backend/linux/git-\345\205\215\345\257\206\346\216\250\351\200\201.md" "b/src/backend/linux/git-\345\205\215\345\257\206\346\216\250\351\200\201.md" new file mode 100644 index 0000000..81066c4 --- /dev/null +++ "b/src/backend/linux/git-\345\205\215\345\257\206\346\216\250\351\200\201.md" @@ -0,0 +1,32 @@ +--- +title: git免密推送 +--- + +接上文 [linux建立git服务器](https://blog.csdn.net/qq_34111969/article/details/107835545) +下面做一下免密推送 + +全部是客户端操作 +1. 查看公私钥,如果存在,一般在`~/.ssh`目录下面(id_rsa,id_rsa_pub),若不存在,创建之 + ```bash + ssh-keygen + ``` +2. 上传公钥到服务器 + ```bash + ssh-copy-id -i ~/.ssh/id_rsa.pub gitpros@123.12.123.12 + ``` + **说明:** + 上面命令其实就是写到服务器的gitpros用户主目录下的`.ssh/authorized_keys`,多个用户可以自动追加到该文件下面,不会覆盖原来用户的公钥 + +3. 测试免密登录 + ```bash + ssh gitpros@123.12.123.12 + ``` +*** +**A&Q:** +1. ***免密未成功?*** + 一般是服务端的`.ssh`,`.ssh/authorized_keys` 权限有问题 + 去服务端使用gitpros账户输入 + ```bash + chmod 755 ~/.ssh + chmod 644 ~/.ssh/authorized_keys + ``` diff --git "a/src/backend/linux/git-\346\220\255\345\273\272\344\270\200\344\270\252git\346\234\215\345\212\241\345\231\250.md" "b/src/backend/linux/git-\346\220\255\345\273\272\344\270\200\344\270\252git\346\234\215\345\212\241\345\231\250.md" new file mode 100644 index 0000000..73f6e9f --- /dev/null +++ "b/src/backend/linux/git-\346\220\255\345\273\272\344\270\200\344\270\252git\346\234\215\345\212\241\345\231\250.md" @@ -0,0 +1,43 @@ +--- +title: 搭建一个git服务器 +--- +1. 首先使用root登录,假设当前服务器ip为123.12.123.12 +2. 新建一个gitpros用户,用来管理所有的代码仓 + ```bash + useradd -d /home/gitpros -m gitpros + ``` + **说明**: + *username* : linux创建用户命令 + *-d [directory]* : 指定用户主目录,这一步最好加上,会自动添加用户配置文件,如`.bashrc`等文件 + *-m* : 若上面指定的文件夹不存在,则自动创建 + *gitpros* : 要创建的用户名 + + ``` + passwd gitpros + ``` + **说明**:下面会让设置gitpros的密码,假设为gitpros + +3. 切换到刚创建的gitpros用户(接下来不需要root用户),进入其主目录,创建一个文件夹projects来放所有项目 + ```bash + su gitpros + cd /home/gitpros 或者直接 cd ~ + mkdir projects + cd projects + ``` +4. 新建一个git服务端代码仓,服务端代码仓一般只用来远程操作,不需要存放实际代码,所以一般会加上`--bare`参数,文件夹结尾一般为.git。 + ```bash + git init --bare firstDir.git + ``` + **至此服务端工作已经做完了,下面都是客户端所做工作** + *** + +5. 使用git从一台客户端克隆远程仓库 + ```bash + git clone gitpros@123.12.123.12:/home/gitpros/firstDir.git + ``` + 期间会让输入密码, 密码为服务端gitpros密码:gitpros + + 后面就是基本的add, commit,pull,push的操作了 + +***tips:*** +- 你可能还需要[git免密推送](https://blog.csdn.net/qq_34111969/article/details/107843003) diff --git a/src/backend/linux/index.md b/src/backend/linux/index.md new file mode 100644 index 0000000..480f6c7 --- /dev/null +++ b/src/backend/linux/index.md @@ -0,0 +1,5 @@ +# linux + +## something + +context \ No newline at end of file diff --git "a/src/backend/linux/linux\347\273\210\347\253\257\346\211\223\345\215\260\346\226\207\346\234\254\351\242\234\350\211\262.md" "b/src/backend/linux/linux\347\273\210\347\253\257\346\211\223\345\215\260\346\226\207\346\234\254\351\242\234\350\211\262.md" new file mode 100644 index 0000000..bf496f4 --- /dev/null +++ "b/src/backend/linux/linux\347\273\210\347\253\257\346\211\223\345\215\260\346\226\207\346\234\254\351\242\234\350\211\262.md" @@ -0,0 +1,12 @@ +--- +title: 终端打印文本的颜色 +--- + +### 设置打印文本的颜色以及背景色,用来提示错误或者警告; +只需要在打印的字符串中添加"\033[**m",\*\*代表颜色数字。 +```bash + console.log('\033[34m\033[47mno files to show! \n\033[47mfds\n') +``` +具体看下面链接 +[颜色参考链接(wiki需翻墙)]([https://zh.wikipedia.org/wiki/ANSI%E8%BD%AC%E4%B9%89%E5%BA%8F%E5%88%97#%E9%80%89%E6%8B%A9%E5%9B%BE%E5%BD%A2%E5%86%8D%E7%8E%B0%EF%BC%88SGR%EF%BC%89%E5%8F%82%E6%95%B0](https://zh.wikipedia.org/wiki/ANSI%E8%BD%AC%E4%B9%89%E5%BA%8F%E5%88%97#%E9%80%89%E6%8B%A9%E5%9B%BE%E5%BD%A2%E5%86%8D%E7%8E%B0%EF%BC%88SGR%EF%BC%89%E5%8F%82%E6%95%B0)) +[https://zh.wikipedia.org/wiki/ANSI%E8%BD%AC%E4%B9%89%E5%BA%8F%E5%88%97#%E9%80%89%E6%8B%A9%E5%9B%BE%E5%BD%A2%E5%86%8D%E7%8E%B0%EF%BC%88SGR%EF%BC%89%E5%8F%82%E6%95%B0](https://zh.wikipedia.org/wiki/ANSI%E8%BD%AC%E4%B9%89%E5%BA%8F%E5%88%97#%E9%80%89%E6%8B%A9%E5%9B%BE%E5%BD%A2%E5%86%8D%E7%8E%B0%EF%BC%88SGR%EF%BC%89%E5%8F%82%E6%95%B0) diff --git "a/src/backend/linux/windows10\345\205\215\345\257\206\347\231\273\345\275\225.md" "b/src/backend/linux/windows10\345\205\215\345\257\206\347\231\273\345\275\225.md" new file mode 100644 index 0000000..84dc69e --- /dev/null +++ "b/src/backend/linux/windows10\345\205\215\345\257\206\347\231\273\345\275\225.md" @@ -0,0 +1,9 @@ +--- +title: windows10免密登录 +--- +按下`win + r`调出运行程序, +输入`netplwiz`, +取消勾选“要使用本计算机,用户必须输入用户名和密码的设置项”选项, +点击应用, +输入默认登录用户以及密码。 +over,over,over。 \ No newline at end of file diff --git "a/src/backend/node/eslint\344\275\277\347\224\250\350\257\264\346\230\216.md" "b/src/backend/node/eslint\344\275\277\347\224\250\350\257\264\346\230\216.md" new file mode 100644 index 0000000..7c55278 --- /dev/null +++ "b/src/backend/node/eslint\344\275\277\347\224\250\350\257\264\346\230\216.md" @@ -0,0 +1,80 @@ +--- +title: eslint使用说明 +--- + +## Eslint配置 + +主要是eslint有自己自带的规则,想要禁止或者开启可以在rules里面设置; + +同时可以增加插件,npm install之后要放配置在plugin属性里面, + +增加了插件之后插件会有一些别人写好的规则组,选择一个或者几个写在extends里面,用来开启某一个插件的某些规则。 + +自定义某插件的某一条规则,需要在rules里面设置,设置方式为“插件名称/规则”,例如下面的import插件的“no-unresolved”规则,写成”import/no-unresolved”。 + +Setting里面写的是共享配置, +按照我的理解是vue插件如果也有一条规则叫做“no-unresolved”,本来要在rules里面写两个(“import/no-unresolved”,”vue/no-unresolved”)的。现在在settings里面只需要写”no-unresolved”一个就行了。(以上的settings只是理解,还未验证)(好像是自定义规则而时候才用到,相当于自定义规则可以访问的全局变量,未验证) + +.eslintrc.* 多层级配置文件,会取父子的并集,重复的规则,已离文件最近的为准 + +.eslintignore 类似.gitignore,比它更加严格,使用参数--ignore-path 可以指定ignore文件,如eslint --ignore-path .gitignore file.js + +```js +module.exports = { +  env: { +    browser: true, //使用browser的规则 +    node: true, //使用node的默认规则 + es6: true, //使用es6规则 +  }, + "globals": { + "Promise": "off", //不能使用某变量,比如上面开启了es6,加了这个就不能使用Promise变量了 + //比如有时候在window定义了一个变量globalA, globalB, 在模块直接访问他们会报错,只能使用window.globalA, window.globalB + "globalA": "readonly", //只读不可写, 定义了之后可以直接在模块里面使用let a = globalA + "globalB": "writable", //可读可写, 定义了之后可以直接在模块里面使用let b = globalB; globalB = 12 + }, +  parser: "vue-eslint-parser", //指定默认的分析器,一般不指定 +  parserOptions: { +    sourceType: "module", +  }, +  plugins: [ +    "vue", //全局rules使用vue/rule 改写 +    "import", //全局rules使用import/rule 改写 +  ], +  extends: [ + //通过npm install eslint-plugin-*,插件名称可以省略 eslint-plugin- 前缀;可以开启多个 + //下面所有extend的规则会和下面的全局rules求并集,冲突的属性会以全局rules为准 +    "airbnb-base", +    "plugin:vue/recommended", +    "eslint:recommended", +  ], +  rules: { + //全局rules + //"off" 或 0 - 关闭规则 + //"warn" 或 1 - 开启规则,使用警告级别的错误:warn (不会导致程序退出) + //"error" 或 2 - 开启规则,使用错误级别的错误:error (当被触发的时候,程序会退出) +    quotes: ["error", "double"], +    "import/no-unresolved": [1, { commonjs: true, amd: true }], +    "import/extensions": [1, "always", { js: "never", vue: "never" }],  +    "import/no-extraneous-dependencies": [2, { devDependencies: true }], +  }, + "overrides": [ + //匹配files属性的文件,会使用下面的子域rules,而不会使用上面的全局rules + { + "files": ["*-test.js","*.spec.js"], + "rules": {//子域rules + "no-unused-expressions": "off" + } + } + ] +  // 下面是共享配置 +  settings: { + //自定义规则使用才用到 + "sharedData": "Hello", +    "import/resolver": { +      alias: { +        "@": "src/", +      }, +    }, +  }, +}; +``` \ No newline at end of file diff --git a/src/backend/node/index.md b/src/backend/node/index.md new file mode 100644 index 0000000..b7d26b0 --- /dev/null +++ b/src/backend/node/index.md @@ -0,0 +1,7 @@ +--- +title: 涉及内容 +--- + +1. webpack使用说明 + +2. eslint使用说明 \ No newline at end of file diff --git a/src/backend/node/webpack-browserlist.md b/src/backend/node/webpack-browserlist.md new file mode 100644 index 0000000..358d5b0 --- /dev/null +++ b/src/backend/node/webpack-browserlist.md @@ -0,0 +1,15 @@ +--- +title: webpack-browserlist +--- + +## 问题定位 +最终定位到的是我在package.json里面写了browserslist +## 解决方法: +删除browserslist,或者在webpack.config.js里面添加 +```js +module.exports = { + target: process.env.NODE_ENV = "production" ? "browserslist" : "web" +} +``` +这是webpack5的bug +[参考链接:browserslist 导致 webpack-dev-server 的自动刷新失效](https://segmentfault.com/q/1010000038165280) \ No newline at end of file diff --git a/src/backend/node/webpack-wds.md b/src/backend/node/webpack-wds.md new file mode 100644 index 0000000..da26716 --- /dev/null +++ b/src/backend/node/webpack-wds.md @@ -0,0 +1,14 @@ +--- +title: webpack-dev-server热更新失效 +--- + +最终定位到的是我在package.json里面写了browserslist +### 解决方法: +删除browserslist,或者在webpack.config.js里面添加 +```js +module.exports = { + target: process.env.NODE_ENV = "production" ? "browserslist" : "web" +} +``` +这是webpack5的bug +[参考链接:browserslist 导致 webpack-dev-server 的自动刷新失效](https://segmentfault.com/q/1010000038165280) \ No newline at end of file diff --git "a/src/backend/node/webpack\344\275\277\347\224\250\350\257\264\346\230\216.md" "b/src/backend/node/webpack\344\275\277\347\224\250\350\257\264\346\230\216.md" new file mode 100644 index 0000000..41aef96 --- /dev/null +++ "b/src/backend/node/webpack\344\275\277\347\224\250\350\257\264\346\230\216.md" @@ -0,0 +1,24 @@ +--- +title: webpack使用说明 +--- + +## publicPath和filename +首先明确一点 +webpack打包后的文件是没有../../以及多层父元素的,只有当前目录(./)和根目录(/) +再明确一点 +插件里面可以定义filename(类似output.filename,可以指定存放目录) +Loader里面可以定义publicPath(用来定义某文件里面的根路径,替换文件里面的/或者./) + +所以,对于使用了某插件以及某loader时候,首先会把文件存放在了filename定义的地方, +然后会用publicPath来替换掉文件中的各种路径(相对路径,绝对路径等等)。 + +所以对于设置了publicPath的loader资源,基本上是对不上的。需要我们手动调整打包之后的资源。 + +比如我们在output.publicPath里面添加了”/ddd/”,没有改变filename, +那么打包后的资源目录结构相对之前是没有变得, +但是,文件里面的资源引用是有问题的,基本上都加上了/ddd/(path), +所以,要想正常运行,我们要在根目录新建一个/ddd/目录,然后然后将所以处理过的资源放到/ddd/目录下面 + +**总结:** +filename用来指定打包路径,会改变打包后的目录结构。 +而publicPath用来改变文件的引用,不会改变打包后的目录结构,所以我们打包完成之后还要手动调整目录结构,以修正publicPath的影响。 \ No newline at end of file diff --git a/src/backend/python/index.md b/src/backend/python/index.md new file mode 100644 index 0000000..728bb70 --- /dev/null +++ b/src/backend/python/index.md @@ -0,0 +1,5 @@ +# python index page + +## something + +context \ No newline at end of file diff --git a/src/frontend/cccc.vue b/src/frontend/cccc.vue deleted file mode 100644 index 20c5f76..0000000 --- a/src/frontend/cccc.vue +++ /dev/null @@ -1,18 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/frontend/css/flex.md b/src/frontend/css/flex.md new file mode 100644 index 0000000..8b3860c --- /dev/null +++ b/src/frontend/css/flex.md @@ -0,0 +1,27 @@ +--- +title: flex +--- + +### 父元素container +``` +.container { + display: flex; + flex-direction: row; + align-items: center; //垂直居中 + space-between: center; //水平居中 +} +``` + +### 子元素item +``` +.item1 { + align-self: center; + flex: 2 0 100px; //因为flex-shrink=0,说明是不缩小,但是可能会放大,所以此处100px指的是最小100px +} +.item2 { + flex: 0 3 100px; //因为flex-grow=0,说明是不放大,但是可能会缩小,所以此处100px指最大100px +} +.item3 { + flex: 3 3 100px; //这里 100px 屁用没有 +} +``` \ No newline at end of file diff --git a/src/frontend/css/grid.md b/src/frontend/css/grid.md new file mode 100644 index 0000000..53eecfd --- /dev/null +++ b/src/frontend/css/grid.md @@ -0,0 +1,5 @@ +--- +title: grid布局 +--- + +**总结**: 直接放弃吧,好多浏览器都不支持(亲测uc不支持),目前还是用flex最靠谱 \ No newline at end of file diff --git a/src/frontend/css/index.md b/src/frontend/css/index.md new file mode 100644 index 0000000..3248945 --- /dev/null +++ b/src/frontend/css/index.md @@ -0,0 +1,8 @@ +--- +title: 所涉内容 +--- + +1. flex +2. grid +3. transform +4. animate \ No newline at end of file diff --git a/src/frontend/html/autocapitalize.md b/src/frontend/html/autocapitalize.md new file mode 100644 index 0000000..22217eb --- /dev/null +++ b/src/frontend/html/autocapitalize.md @@ -0,0 +1,73 @@ +--- +title: autocapitalize自动大写 +--- + +> The autocapitalize 全局属性 是一个枚举属性,它控制用户输入/编辑文本输入时文本输入是否自动大写,以及如何自动大写。 +属性必须取下列值之一: +off or none: 没有应用自动大写(所有字母都默认为小写字母)。 +on or sentences: 每个句子的第一个字母默认为大写字母;所有其他字母都默认为小写字母。 +words: 每个单词的第一个字母默认为大写字母;所有其他字母都默认为小写字母。 +characters: 所有的字母都默认为大写。 +在物理键盘上输入时,autocapitalize 属性不会影响行为。相反,它会影响其他输入机制的行为,比如移动设备的虚拟键盘和语音输入。 + +**总结**: pc端实体键盘根本就不起作用,手机移动端能够起作用 +比如当autocapitalize="characters"时候,掉起键盘以及每输入一个字符都会改成大写键盘(可以手动调成小写键盘,小写输入的input框的值也是小写),相当于每一次都帮你点击了大写按钮。 + +下面还有最新的语音识别,贼吊,需要使用静态服务器打开页面 +```js + + + + + + + Document + + + + + + +
下面是识别结果
+
+ + + +``` \ No newline at end of file diff --git a/src/frontend/html/index.md b/src/frontend/html/index.md new file mode 100644 index 0000000..82eced9 --- /dev/null +++ b/src/frontend/html/index.md @@ -0,0 +1,6 @@ +--- +title: 所涉内容 +--- +1. canvas +2. webgl +3. 标签的全局属性 \ No newline at end of file diff --git a/src/frontend/index.md b/src/frontend/index.md index 26a64c5..87f2d00 100644 --- a/src/frontend/index.md +++ b/src/frontend/index.md @@ -1,13 +1 @@ -## 问题 - -1. 描述 -```js -console.log(1211111232); // dfas -``` - - - - \ No newline at end of file +前端问题 \ No newline at end of file diff --git a/src/frontend/javascript copy/es6.md b/src/frontend/javascript copy/es6.md deleted file mode 100644 index 3fb9f29..0000000 --- a/src/frontend/javascript copy/es6.md +++ /dev/null @@ -1 +0,0 @@ -this is es6 \ No newline at end of file diff --git a/src/frontend/javascript copy/tes1/dd.md b/src/frontend/javascript copy/tes1/dd.md deleted file mode 100644 index 0a214f8..0000000 --- a/src/frontend/javascript copy/tes1/dd.md +++ /dev/null @@ -1 +0,0 @@ -dsafsd \ No newline at end of file diff --git a/src/frontend/javascript/es6.md b/src/frontend/javascript/es6.md deleted file mode 100644 index d238f3e..0000000 --- a/src/frontend/javascript/es6.md +++ /dev/null @@ -1 +0,0 @@ -this is es611212123112111231 \ No newline at end of file diff --git a/src/frontend/javascript/index.md b/src/frontend/javascript/index.md new file mode 100644 index 0000000..fe35c45 --- /dev/null +++ b/src/frontend/javascript/index.md @@ -0,0 +1,5 @@ +# javascript index page + +## something + +context \ No newline at end of file diff --git a/src/frontend/javascript/tes1/dd.md b/src/frontend/javascript/tes1/dd.md deleted file mode 100644 index 0a214f8..0000000 --- a/src/frontend/javascript/tes1/dd.md +++ /dev/null @@ -1 +0,0 @@ -dsafsd \ No newline at end of file diff --git "a/src/frontend/javascript/this\346\214\207\345\220\221.md" "b/src/frontend/javascript/this\346\214\207\345\220\221.md" new file mode 100644 index 0000000..f205dfd --- /dev/null +++ "b/src/frontend/javascript/this\346\214\207\345\220\221.md" @@ -0,0 +1,18 @@ +--- +title: this指向 +--- +### 基本分为两类 +1. 非箭头函数的this + 简而言之,this指向调用这个函数的对象。 + ***notice:*** 因为可以使用赋值,或者使用call,apply,以及bind,所以这个this是可以改变的 +2. 箭头函数的this + 简而言之,this指向声明这个箭头函数时所处的上下文。 + + 可以将箭头函数理解为一个new function(); 当执行到这里时,上下文是什么,它就是什么。 + 像那种a函数return出来的箭头函数,this指向执行函数a的对象。 + ***notice:*** 使用call,apply,以及bind,不能改变this指向,所以,第一个参数应该设为null + + MND如是说: + > **在箭头函数中,this与封闭词法环境的this保持一致。在全局代码中,它将被设置为全局对象。** + 对于函数内创建的箭头函数,无论如何,this被设置为他被创建时的环境,这些箭头函数的this将被设置为封闭的词法环境的this + diff --git "a/src/frontend/javascript/\345\216\237\345\236\213\351\223\276\350\257\264\346\230\216.md" "b/src/frontend/javascript/\345\216\237\345\236\213\351\223\276\350\257\264\346\230\216.md" new file mode 100644 index 0000000..3faec3a --- /dev/null +++ "b/src/frontend/javascript/\345\216\237\345\236\213\351\223\276\350\257\264\346\230\216.md" @@ -0,0 +1,38 @@ +--- +title: 原型链 +--- +### 10.原型链实现继承 +不搞那些概念性的东西,直接说结论了,实现继承的方式就是: +***将第一个构造函数的原型等于第二个构造函数的实例,然后第一个构造函数的所有实例都会拥有第二个构造函数的所有自有属性以及原型属性*** + +```js +function Person(){ + this.a = 1; + this.b = 2; +} +function PersonNext(){ + this.shareOne = "one"; + this.shareTwo = "two"; +} +PersonNext.prototype.cc = function(){ + alert(11); +} +pNext = new PersonNext(); + +Person.prototype = pNext; //将Person的原型等于PersonNext的实例,这样写会将Person的原型全部替换,之前写的原型属性都会被替换 +Person.prototype.fa = function(){ //在替换之后写的属性才会生效 + alert("aha!") +} + +per1 = new Person(); +per1.hasOwnProperty("a"); //true + +per1.shareOne; //one +per1.hasOwnProperty("shareOne"); //false + +per1.cc; //f () {alert(11)} +per1.hasOwnProperty("cc"); //false + +per1.fa; //f () {alert("aha")} +per1.hasOwnProperty("fa"); //false +``` \ No newline at end of file diff --git "a/src/frontend/javascript/\351\201\215\345\216\206\351\207\214\351\235\242\344\275\277\347\224\250async.md" "b/src/frontend/javascript/\351\201\215\345\216\206\351\207\214\351\235\242\344\275\277\347\224\250async.md" new file mode 100644 index 0000000..83d85d7 --- /dev/null +++ "b/src/frontend/javascript/\351\201\215\345\216\206\351\207\214\351\235\242\344\275\277\347\224\250async.md" @@ -0,0 +1,69 @@ +--- +title: 遍历里面使用async +--- + +### 需求:我想要在一个遍历里面执行多个异步操作,需要等上一个异步操作完了,再去执行下一个异步; + +1. 直接使用了forEach + ```js + function cc(){ + return new Promise((resolve, reject) => { + setTimeout(() => { + console.log(12) + resolve() + }, 2000); + }) + } + + [1,2,3,4].forEach(async item => { + console.log(item) + await cc() + console.log('end') + }) + ``` + **结果:** 一开始就输入`1,2,3,4`,2秒后输出四个`12 和 ‘end’` + **分析:** 与要求不符合,使用map或者reduce也是一样的 + +2. 使用for of + ```js + function cc(){ + return new Promise((resolve, reject) => { + setTimeout(() => { + console.log(12) + resolve() + }, 2000); + }) + } + + (async function (){ + for (let item of [1,2,3,4]) { + console.log(item) + await cc() + } + })() + ``` + **结果:** 首先输出了`1`,待两秒之后输出`12 和 2`,在两秒输出`12 和 3`,在两秒输出`12 和 4`,在两秒输出`12` + **分析:** 满足需求 +3. 自己写了个同步方法,参数需要return 一个promise对象 + ```js + Array.prototype.asyncForEach = async function(callback){ + let len = this.length + for (let i = 0; i < len; i++) { + console.log('one for start', i); + console.log('before======') + await callback() + console.log('after=====') + console.log('one for end', i); + } + } + + mm = [1,2,3,4] //mm首先需要声明,不能够直接[1,2,3,4].asyncForEach,我也不知道为啥 + mm.asyncForEach((item, index) => { + let promise = new Promise((resolve, reject) => { + setTimeout(() => { + resolve('2s passed') + }, 2000); + }) + return promise + }) + ``` \ No newline at end of file diff --git a/src/markdown-examples.md b/src/markdown-examples.md index 069f57b..b726568 100644 --- a/src/markdown-examples.md +++ b/src/markdown-examples.md @@ -1,3 +1 @@ -# fasfd - -dsfads \ No newline at end of file +examples \ No newline at end of file diff --git a/refreshConfig.data.ts b/src/refreshConfig.data.ts similarity index 72% rename from refreshConfig.data.ts rename to src/refreshConfig.data.ts index 71b7e6b..88a9980 100644 --- a/refreshConfig.data.ts +++ b/src/refreshConfig.data.ts @@ -1,13 +1,11 @@ import * as path from 'path'; -import { readFileSync, readdirSync, writeFileSync } from 'fs'; +import { readFileSync, readdirSync } from 'fs'; import { WordMap } from './types' export default { - watch: ['./src/**/*'], + // watch: ['./**/*'], load(){ - let viteConfig = readFileSync('./.vitepress/config.mts', 'utf-8'); - console.log('aaa', viteConfig) - // writeFileSync('./.vitepress/config.mts', viteConfig) + let viteConfig = readFileSync('../.vitepress/config.mts', 'utf-8'); return { a: 12 }; @@ -27,8 +25,9 @@ type Sidebar = { } function getRecursiveList(dirAbsolutePath: string, parentName: string){ - let resArray: Sidebar[] = [] - let items = readdirSync(path.resolve(dirAbsolutePath), {withFileTypes: true}); + let resArray: Sidebar[] = []; + // index.md放到最前面 + let items = readdirSync(path.resolve(dirAbsolutePath), {withFileTypes: true}).sort((a) => a.name === 'index.md' ? -1 : 1); items.map(item => { if(item.isDirectory()) { resArray.push({ @@ -58,17 +57,15 @@ export function getNavList(dirAbsolutePath: string){ .map(item => ({ text: WordMap[item.name], link: `/${item.name}` })) } -export function getNavAndSideBarInfo(): {navList: Nav[], sideBarList: Sidebar[], sidebarObj: any}{ +export function getNavAndSideBarInfo(): {navList: Nav[], sidebarObj: any}{ let prefix = [{text: WordMap.index, link: '/'}]; - let navList = getNavList(path.resolve(__dirname, 'src')); - let sideBarList = getRecursiveList(path.resolve(__dirname, 'src'), ''); + let navList = getNavList(path.resolve(__dirname, '')); let sidebarObj = {}; navList.forEach(item => { - sidebarObj[item.link] = getRecursiveList(path.resolve(__dirname, `src/${item.link}`), item.link); + sidebarObj[item.link] = getRecursiveList(path.resolve(__dirname, `.${item.link}`), item.link); }) return { navList: prefix.concat(navList), - sideBarList, sidebarObj, } } \ No newline at end of file diff --git a/types.ts b/src/types.ts similarity index 100% rename from types.ts rename to src/types.ts diff --git a/types.js b/types.js deleted file mode 100644 index 2f3c0d1..0000000 --- a/types.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -exports.__esModule = true; -exports.WordMap = void 0; -var WordMap; -(function (WordMap) { - // eslint-disable-next-line no-unused-vars - WordMap["frontend"] = "\u524D\u7AEF"; - // eslint-disable-next-line no-unused-vars - WordMap["backend"] = "\u540E\u7AEF"; - // eslint-disable-next-line no-unused-vars - WordMap["index"] = "\u9996\u9875"; -})(WordMap = exports.WordMap || (exports.WordMap = {}));