获得徽章 19
- #每天一个知识点# 关于在 TypeScript 中声明全局变量,什么时候用 declare global?什么时候不用?
- 一个非 JS 模块文件内使用 declare var __INITIAL_DATA__: string; 声明的类型,对任何文件都起作用,你可以通过 __INITIAL_DATA__ 或 window.__INITIAL_DATA__ 两种方式访问
- 一个 JS 模块文件内想要声明一个对任何文件都起作用的类型声明,必需使用 declare global { var __INITIAL_DATA__: string; }
- declare global 在 .d.ts 文件内不生效
- 最佳实践:全局变量建议在专门的类型声明文件(.d.ts 后缀,比如 globals.d.ts)中以 declare var __INITIAL_DATA__: string 方式声明展开赞过评论3 - #每天一个知识点# Git 通过 git config 指令定制配置。配置按照作用范围可分为 3 个等级:
1. 系统配置。对系统上每一个用户生效,通过 `--system` 选项指定
2. 全局配置。仅对当前用户生效,通过 `—global` 选项指定
3. 本地配置。仅对当前仓库生效,通过 `—local` 选项指定展开1点赞 - #每天一个知识点# 本地正在开发一个三方包,想在本地一个项目中调试,可以按照如下步骤进行:
本地项目链接三方包:
```bash
cd ~/projects/some-dep
npm link # 全局创建一个指向当前三方包目录的符号链接
cd ~/projects/my-app
npm link some-dep # 项目中所依赖的 some-dep 的目录指向全局符号链接
```
清理三方包:
```bash
cd ~/projects/my-app
npm uninstall --no-save some-dep && npm install # 清理项目中的 some-dep 符号链接
cd ~/projects/some-dep
npm uninstall # 删除 some-dep 的全局符号链接
```展开评论点赞 - #每天一个知识点# 对 Node.js 来说,偶数版本都属于 "长期支持"版本(long-term support,简写 LTS),会经历 Initial Release → Active LTS → Maintenance LTS → End Of Life 这 4 个阶段。 从 Initial Release 开始的 6个月内,处于 Current 状态;从 Active LTS 到 End Of Life 中间会持续 30 个月。一个版本一旦进入 Active LTS 状态,就会成为官方推荐安装版本。
nodejs.dev
展开赞过评论2 - #每天一个知识点# 包管理工具 pnpm 目前最新的 8.x 版本的 Node.js 最低版本要求是 v16.14,如果你的项目还在使用 Node.14,需要安装 pnpm@7。
```bash
$ npm install -g pnpm@7
```展开2点赞 - #每天一个知识点# package.json 文件中 dependencies vs. peerDependencies
区别:
dependencies 指定当前包运行时的依赖包,这些依赖包将会被安装到生产环境中。dependencies 声明的包会被自动安装到项目的 node_modules 目录中,并在项目运行时被加载和使用。
peerDependencies 也是用来指定当前包运行时的依赖包,不过与 dependencies不同的是——peerDependencies 声明的模块不会自动安装到当前包的 node_modules 目录中,而是期望它们在上层依赖的 node_modules 中安装。适应于库、包或插件这种需要宿主包的场景。
案例:
假设我们的项目需要使用 axios 这个 HTTP 客户端库,我们可以将其添加到 dependencies 字段中:
```JSON
"dependencies": {
"axios": "^0.21.1"
}
```
假设我们开发了一个 Vue 组件库,依赖于 Vue 运行时,我们可以将其添加到 peerDependencies 字段中:
```JSON
"peerDependencies": {
"vue": "^2.6.12"
}
```
从 npm 版本 3 到 6,peerDependencies 不会自动安装,从 npm v7 开始,默认情况下会安装 peerDependencies。展开赞过评论2 - #每天一个知识点# fs-extra 是作为替代 Node.js 内置 fs 模块创建的。在 fs-extra 内部,除了重新导出(re-exporting)内置 fs 模块的所有方法外,还增加了一些常用而且安全的方法,比如 copy()、remove() 和 mkdirs()。因此,项目中如果有使用使用 fs 的地方,可以直接替换成 fs-extra。
```js
const fs = require('fs') // this is no longer necessary
```
```js
const fs = require('fs-extra') // this is no longer necessary
```展开3点赞 - #每天一个知识点# Next.js 内置了 styled-jsx 支持,拓展了 JSX 中书写 CSS 的能力,提供对隔离作用域 CSS(isolated scoped CSS)的支持,目标是支持类似于 Web 组件的“shadow CSS”。Vue 单文件语法 <style scoped> 作用与此类似。
```jsx
function HelloWorld() {
return (
<div>
Hello world
<p>scoped!</p>
<style jsx>{`
p {
color: blue;
}
div {
background: red;
}
@media (max-width: 600px) {
div {
background: blue;
}
}
`}</style>
<style global jsx>{`
body {
background: black;
}
`}</style>
</div>
)
}
export default HelloWorld
```
```vue
<style scoped>
.example {
color: red;
}
</style>
<template>
<div class="example">hi</div>
</template>
```展开2点赞 - #每天一个知识点# fs.rmSync 是 Node.js v14.14.0+ 后增加的新方法,用来删除文件或者目录。替代旧的、功能单一的 unlinkSync、rmdirSync 方法。
尤其令人满意的是,fs.rmSync(path, { recursive: true, force: true }) 方式就能实现类似 Linux 系统上 rm -rf 指令一样的功能。展开评论点赞 - #每天一个知识点# Node.js ES Module 模块内部是不存在 `__dirname` 变量的,不过可以通过下面的方式获取:
```JavaScript
import { fileURLToPath } from 'node:url'
import path from 'node:path'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
```展开赞过22