【记录】因下载使用 nvm 而引发的学习事件 了解并学会了如何使用下载工具 curl了解如何设置 Path 环境变量(控制面板 -> 系统和安全 -> 系统 -> 高级系统设置)nvm 设置 node 或 nvm 镜像(用来下载 node 的源、用来下载项目依赖的源)文件路径中符号的含义node 历史版本获取链接nvm-windows 常用命令依赖缓存的获取npm 脚本的执行原理.npmrc 配置文件作用一开始在 github 上找到nvm这个仓库。
vue-cli 创建的 vue 项目的模式与环境 以 vue-cli-service serve 脚本启动应用,process.env.NODE_ENV 的值为 development。通过 cross-env,把脚本改成如下样子,就能通过 VUE_APP_DEV、VUE_APP_PROD 判断是开发还是生产环境。注意:cross-env 和 dotenv 的文件里定义的变量名,必须是 BASE_URL 或以 VUE_APP_ 开头。还可以通过 dotenv 在不同模式(test、pre、prod)下定义不同的环境变量。
express.json() 和 express.urlencoded({ extended: true }) 作用 URL 编码只对特殊字符编码,普通的字母、数字、大部分符号不转译。为什么不直接使用 ASCII 码,因为这样会导致不够直观,清晰,容易引起混淆。字符ASCII 码URL 编码空格32%2038%2661%3D35%2343%2B37%25。
使用 socket.io 创建一个简单的聊天应用 之后在浏览器中打开多个 localhost:3000 窗口,就可以测试 socket 通信了。// 客户端监听来自服务端的 chat no name 事件。创建一个目录 easy-chat-application。// 客户端监听来自服务端的 chat all 事件。有广播所有人的事件,也有广播除发送人外所有人的事件。然后下载 express 和 socket.io。在目录下执行命令 npm init -y。
node express 学习 法二:在 vue 文件中简单写一个请求,打开浏览器发现控制台打印了我们在响应里设置返回的数据。然后主 app 通过 app.use 给这个子 app 下的所有路由添加前缀。就是可以通过 url 直接访问到被静态托管的文件。法一:直接在浏览器访问 http://127.0.0.1:8000/。首先创建一个文件,底下创建一个 index.js 文件。然后创建一个 index.js 文件。如果只想返回静态的 html 模板,也是可以的。如果想访问子 app 的路由,也得带上前缀。编写一个自己的中间件。
什么是循环 circular symlinks(循环符号链接)? 假设 bar 是 foo 的依赖,foo 也是 bar 的一个依赖。最后获取两种方式都可以,只是在某些环境下,第二种可能会出现无限循环错误。符号链接将不会循环。
【译】Flat node_modules is not the only way 是的,我们仅仅下载了 express,所以它是你的项目仅能获取的包。第二个 pnpm 的 node_modules 结构诀窍就是,这个包的依赖和这个包的真实位置在一个相同级别的目录位置下。express 的所有依赖都是符号链接,指向在 node_modules/.pnpm 下相应的目录。把 express 的依赖安放在一个级别提升的目录允许避免循环的符号链接。这个扁平化的结构避免了因为嵌套的 node_modules 而导致的长路径问题,但是依旧保持了包之间的隔离。那 express 的所有依赖去哪了?
【译】Symlinked `node_modules` structure 当处理模块时,Node 会忽略符号链接,所以当 bar 从 foo@1.0.0/node_modules/foo/index.js 文件被引入 required 时,Node 不会使用 foo@1.0.0/node_modules/bar (它是个符号链接),相反,bar 会被解析到它的真实位置(bar@1.0.0/node_modules/bar)。对于 Node.js 而言这两者并没有什么不同:依赖是在这个包的 node_modules 里面还是在这个包的上层目录下的 node_modules 里面。
学习 pnpm 但如果 bar 有一个依赖 “foo”: “2.0.0”,并且 foo@2.0.0 不再工作空间下,foo@2.0.0 将会从仓库中下载。举例,foo@1.0.0 将会被链接到 bar 里面:如果 bar 有一个依赖 “foo”:“^1.0.0”,并且包 foo@1.0.0 在那个工作空间下。所以,如果你设置 “foo”: “workspace:2.0.0”,这次安装将会失败,因为 “foo@2.0.0” 不在当前的工作空间里。默认情况下,如果可获取的包符合声明的版本范围,pnpm 将从工作空间链接包。
【译】React18 中会自动批量更新,达到更少的 render 次数 批量更新是指 React 的多个 state 在一个 re-render 里更新,以获得更好的性能。例如,如果在一个 click 事件中你有两个 state 更新,React 总是会批量更新它们在一个 re-render 里。如果你执行下面的代码,你将会看到每一次你点击,React 仅仅会执行一次 render,即使你设置了 state 两次。// 还不会 re-render setFlag(f =>!f);
百度精准搜索技巧 juejin 是二级域名。http、https 并不属于域名的一部分。一个域名是由几部分组成,它被点分隔,不同于中文书写顺序,它需要从右到左阅读。假设你想要搜索出来的内容必定包含某关键字,就用。
ts 学习记录 type 和 interface 最大的两点区别就是:是否能定义基本类型、同名是否能自动合并。1、type 能定义基本类型、联合类型等,而 interface 不可以。interface 只能定义对象类型。2、type 要合并类型只能通过 & 符号进行合并,同名的 type 会起冲突。而 interface 可以通过 extends 合并,也可以定义同名的 interface,其属性会自动合并。
面试题:有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,给你24小时时间,至少要多少只小白鼠才可以试出哪瓶有毒? 通过这个二进制给水编号的方法,我们居然可以不用一步一步的判断哪部分水有毒。而是直接通过最终的结果推导出哪杯水有毒。不得不感叹,这二进制真神奇。
css 为什么从右往左解析的猜测 其实我从来没想过这个问题,写 css 的时候只是按照规则去写就完了。我觉得应该是从左往右吧?但居然是从右往左。为什么不是从左往右呢?首先浏览器会把 html 解析为 dom 树,style 样式解析为 css 规则树。dom 树很好理解,就是一个个节点。
两个函数弄懂 async await 执行顺序 其实 async 函数本身会返回一个 Promise。经过测试会发现,过了 1s 后,打印的 res 值始终是 speak 函数 return 的返回值。async 函数的返回值应该是 await 函数的返回值。