热搜:fiddler git ip ios 代理
历史搜索

前端工程化之项目搭建初始化指南

游客2024-08-14 09:30:02
目录文章目录
  1. 一、项目初始化及配置
  2. 二、规范代码与提交

本系列是一个从 0 到 1 的实现过程,如果您有耐心跟着实现,您可以实现一个完整的react18 + ts5 + webpack5 + 代码质量&代码风格检测&自动修复 + storybook8 + rollup + git action实现的一个完整的组件库模板项目。

在你阅读完本文后你将会学到:

  • 一个标准化的项目初始化、代码规范、提交规范的配置流程;
  • eslint、stylelint 及 prettier 的配置&自动保存修复;
  • 代码提交规范的第三方工具强制约束方式实现;
  • 自定义可视化的代码提交规范。

一、项目初始化及配置

package.json

package.json 是基于 Node.js 生态系统的任何项目(尤其是前端项目)的核心文件之一。它在项目中扮演了多个重要角色:

  • 项目元数据(Metadata): 它包含了项目的元数据,如项目名称、版本、描述、作者、许可证等。
  • 依赖管理(Dependency Management): 它列出了项目所依赖的 npm 包及其版本,这包括 dependencies 和 devDependencies 等。
  • 脚本(Scripts): scripts 字段允许定义可以通过 npm run 命令执行的脚本,使得启动、构建、测试和部署等操作可以自动化。
  • 版本控制(Version control): 通过 version 字段指定,可以帮助管理项目的发布和版本控制。
  • 配置平台(Platform Config): 它可以指明项目运行所需的 Node.js 或 npm 版本,有助于确保一致的开发环境。
yarn init -y
{
  "name": "lint_demo",
  "version": "1.0.0",
  "description": "a lint demo ",
  "main": "dist/boundle.js",
  "author": "xxx",
  "license": "MIT",
  "private": false
}

LICENSE

LICENSE 文件是指软件项目中包含的许可证文件,用于规定该软件在何种条件下可以被使用、复制、修改和分发。LICENSE 文件通常包含了开源许可证的全文或摘要,以及适用该许可证的条款和条件。在开源软件项目中,LICENSE 文件是非常重要的,它定义了开发者和用户之间的权利和责任,确保了代码的合法使用和共享。

常见的开源许可证包括 MIT 许可证、GNU 通用公共许可证(GPL)、Apache 许可证等。每种许可证都有不同的要求和限制,开发者在选择和使用许可证时需要仔细考虑项目的需求和目标。

可以在choosealicense网站选择一个合适的

.gitignore

.gitignore文件是用来指定哪些文件或目录不应该被 Git 版本控制系统跟踪的配置文件。在项目中,有些文件(如编译生成的文件、日志文件、临时文件等)不应该被包含在版本控制中,因为它们可能包含敏感信息、过时的内容或者不必要的文件。通过.gitignore 文件,可以告诉 Git 哪些文件应该被忽略,不会被提交到代码仓库中。

使用 vscode 的 gitignore 插件,下载安装该插件之后, ctrl+shift+p 召唤命令面板,输入 Add gitignore 命令,即可在输入框输入系统或编辑器名字,来自动添加需要忽略的文件或文件夹至 .gitignore 中。

.npmrc | .yarnrc

npmrcyarnrc 是两个配置文件,用于配置 npm 和 Yarn 包管理器的行为和设置。它们分别用于配置 npm 和 Yarn 的命令行工具的行为,例如设置镜像源、代理、缓存路径等。

npmrc

npmrc 是 npm 的配置文件,通常是 .npmrc 文件。你可以在项目级别或全局级别创建 .npmrc 文件来配置 npm 的行为。

配置方式:

  1. 项目级别配置: 在项目根目录下创建 .npmrc 文件,并添加所需配置。
  2. 全局级别配置: 使用命令 npm config edit 打开全局配置文件,并添加所需配置。

常见配置项:

  • registry:设置包的下载源。
  • proxyhttps-proxy:设置代理服务器。
  • cache:设置包的缓存路径。
  • prefix:设置全局安装包的路径。
  • strict-ssl:是否强制使用 SSL。

示例:

# .npmrc

# 设置下载源为淘宝镜像,淘宝证书到期了,换了
registry=https://registry.npm.taobao.org/

# 设置代理服务器
proxy=http://proxy.example.com:8080
https-proxy=http://proxy.example.com:8080

# 设置包的缓存路径
cache=/path/to/npm-cache

# 设置全局安装包的路径
prefix=/path/to/npm-global

yarnrc

yarnrc 是 Yarn 的配置文件,通常是 .yarnrc.yarnrc.yml 文件。你可以在项目级别或全局级别创建 .yarnrc 文件来配置 Yarn 的行为。

配置方式:

  1. 项目级别配置: 在项目根目录下创建 .yarnrc 文件,并添加所需配置。
  2. 全局级别配置: 使用命令 yarn config set 添加全局配置。

常见配置项:

  • registry:设置包的下载源。
  • proxyhttps-proxy:设置代理服务器。
  • cache-folder:设置包的缓存路径。
  • preferred-cache-folder:设置首选缓存路径。
  • nodeLinker:设置 Node 模块链接器。

示例:

# .yarnrc

# 设置下载源为淘宝镜像,淘宝证书到期了,换了
registry "https://registry.npm.taobao.org/"

# 设置代理服务器
proxy "http://proxy.example.com:8080"
https-proxy "http://proxy.example.com:8080"

# 设置包的缓存路径
cache-folder "/path/to/yarn-cache"

# 设置首选缓存路径
preferred-cache-folder "/path/to/preferred-cache"

配置文件中的每一行都应该是一个配置项,以 key value 的格式表示。你可以根据需要添加或修改这些配置项来定制 npm 和 Yarn 的行为。

README.md

README.md 文件通常是一个项目的说明文档,用于向其他开发者或用户介绍项目的内容、使用方法、贡献指南等信息。.md 代表 Markdown 格式,Markdown 是一种轻量级的标记语言,用于简单地排版文档。

README.md 文件通常包含以下内容:

  • 项目名称和简介:简要介绍项目的名称、功能和用途。
  • 安装说明:指导用户如何安装项目的依赖或部署项目。
  • 使用方法:说明如何使用项目,包括配置、运行命令等。
  • 示例:提供一些示例代码或截图,展示项目的功能。
  • 贡献指南:说明如何贡献代码或报告问题。
  • 版本历史:列出项目的版本历史和更新内容。
  • 许可证信息:说明项目的许可证类型和使用限制。

二、规范代码与提交

代码规范

EditorConfig

前端工程化之项目搭建初始化指南 1

更改配置文件的内容如下,然后重启 vscode,因为有时候抽风,vscode 需要重新构建依赖树和缓存,所以重启之后这个报错就消失了。

{
  "compilerOptions": {
    // 基本配置
    "target": "ES5", // 编译成哪个版本的 es
    "module": "ESNext", // 指定生成哪个模块系统代码
    "lib": ["dom", "dom.iterable", "esnext"], // 编译过程中需要引入的库文件的列表
    "allowJs": true, // 允许编译 js 文件
    "jsx": "react", // 在 .tsx 文件里支持 JSX
    "isolatedModules": true,
    "strict": true, // 启用所有严格类型检查选项

    // 模块解析选项
    "moduleResolution": "node", // 指定模块解析策略
    "esModuleInterop": true, // 支持 CommonJS 和 ES 模块之间的互操作性
    "resolveJsonModule": true, // 支持导入 json 模块
    "baseUrl": "./", // 根路径
    "paths": {
      // 路径映射,与 baseUrl 关联,这个需要跟 webpack 一一对应,我们后面会讲解如何配置&使用
      "@src/*": ["src/*"],
      "@components/*": ["src/components/*"],
      "@utils/*": ["src/utils/*"]
    },

    // 实验性选项
    "experimentalDecorators": true, // 启用实验性的 ES 装饰器
    "emitDecoratorMetadata": true, // 给源码里的装饰器声明加上设计类型元数据

    // 其他选项
    "forceConsistentCasingInFileNames": true, // 禁止对同一个文件的不一致的引用
    "skipLibCheck": true, // 忽略所有的声明文件( *.d.ts)的类型检查
    "allowSyntheticDefaultImports": true, // 允许从没有设置默认导出的模块中默认导入
    "noEmit": true // 只想使用 tsc 的类型检查作为函数时(当其他工具(例如 Babel 实际编译)时)使用它
  },
  "include": [
    "src/**/*" // 这将包括 src 目录下的所有文件
  ]
}

介绍下 tsconfig 常见的配置

在 TypeScript 5 中,tsconfig.json 文件仍然是用来配置 TypeScript 项目编译选项的主要方式。这个文件指定了编译器应遵守的规则和项目的编译上下文。以下是一些常见的配置选项和简短的描述:

compilerOptions: 该对象包含可以用来配置编译器行为的各种选项。

  • target: 设置目标 JavaScript 语言版本。例如,”ES5″, “ES6”, “ES2015”, “ES2020″等。
  • module: 指定生成的代码模块化的方式,如 “CommonJS”, “AMD”, “System”, “UMD”, “ES6”, “ES2015”, “ES2020″等。
  • lib: 指定编译过程中需要包含的库文件的列表,如 [“DOM”, “ES5”, “ScriptHost”, “WebWorker”]。
  • allowJs: 允许编译器编译 JavaScript 文件。
  • checkJs: 允许在 .js 文件中报告错误。
  • jsx: 在.tsx 文件中指定 JSX 代码的生成,常用值有 “React”, “Preserve”。
  • declaration: 生成相应的.d.ts 声明文件。
  • sourceMap: 生成相应的.map 文件,用于调试。
  • outFile: 将所有全局作用域的文件合并到一个输出文件中。
  • outDir: 指定输出文件夹。
  • strict: 启用所有严格类型检查选项。
  • noImplicitAny: 禁止隐含的 any 类型。
  • moduleResolution: 模块解析策略,”Node” 或 “Classic”。
  • baseUrl: 用于解析非相对模块名称的基目录。
  • paths: 一个映射列表,与 baseUrl 一起工作以进行模块重定向。
  • esModuleInterop: 改善了对非 ES 模块的默认导出的兼容。
  • resolveJsonModule: 允许导入.json 文件。
  • noEmit: 不生成输出文件。
  • noEmitOnError: 发生错误时不生成输出文件。
  • skipLibCheck: 跳过对.d.ts 文件的类型检查;对于包含大量声明文件的大型项目,这可以减少编译时间。
  • forceConsistentCasingInFileNames: 确保文件名的大小写一致,以避免在大小写不敏感的文件系统中产生问题。
  • strictNullChecks: 当设置为 true 时,在所有可能为 null 或 undefined 的地方显式检查。
  • strictFunctionTypes: 更严格地检查函数类型的赋值。
  • strictBindCallApply: 对 bind,call 和 apply 方法使用更严格的类型。
  • strictPropertyInitialization: 确保类的每个实例属性都显式初始化。
  • noImplicitThis: 当 this 表达式的值为 any 类型的时候,生成一个错误。
  • alwaysStrict: 在代码中每个文件都应用 JavaScript 的严格模式。
  • noUnusedLocals: 报告未使用的局部变量。
  • noUnusedParameters: 报告未使用的函数参数。
  • noImplicitReturns: 在函数中,如果不是所有路径都有返回值,将报告错误。
  • noFallthroughCasesInSwitch: 防止 switch 语句贯穿(未通过 break 中断)。
  • inlineSourceMap: 生成内联的.map 源映射文件,而不是单独的文件。
  • inlineSources: 将代码与 sourcemap 生成在同一文件中,仅当你设置了 inlineSourceMap 或 sourceMap 选项时才有效。
  • emitDecoratorMetadata: 当使用装饰器时,会为相关的设计类型添加元数据信息。
  • experimentalDecorators: 启用实验性的装饰器支持。
  • removeComments: 从输出文件中移除注释。
  • isolatedModules: 确保每个文件可以安全地独立编译。
  • downlevelIteration: 当目标为低于 ES6 环境时,提供对迭代器的全面支持。
  • preserveConstEnums: 即使使用了 const enum, 枚举也会被保留在生成的代码中。
  • suppressImplicitAnyIndexErrors: 当索引对象时忽略 noImplicitAny 的错误。 include: 这个属性定义了编译器应该包含在编译过程中的文件或文件夹。 exclude: 这个属性定义了编译器应该排除在编译过程之外的文件或文件夹。 extends: 允许配置继承自另一个配置文件。 files: 如果你想显式设置一组文件(而不是整个目录),可以使用此属性。 references: 用于配置项目间的依赖。
标签:eslint