【愚公系列】《AIGC辅助软件开发》015-AI辅助前端编程:利用 ChatGPT 写代码

举报
愚公搬代码 发表于 2024/10/31 11:46:21 2024/10/31
【摘要】 🏆 作者简介,愚公搬代码🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主...

🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏

🚀前言

在数字化时代的浪潮中,前端开发面临着日益增长的挑战与机遇。随着用户对网站与应用体验的要求不断提高,开发者们需要更高效、更智能的工具来提升工作效率。近期,人工智能技术的迅猛发展为这一领域带来了新的变革,尤其是像 ChatGPT 这样的 AI 模型,成为了开发者的得力助手。

本文将探讨如何利用 ChatGPT 来辅助前端编程,从代码生成到问题解决,我们将分享实际案例与技巧,帮助你在开发过程中事半功倍。无论你是前端开发的新手,还是经验丰富的工程师,相信这篇文章都能为你提供新的视角与灵感。让我们一起踏上这段 AI 编程之旅,开启更高效的开发体验!

🚀一、利用 ChatGPT 写代码

🔎1.生成项目打包配置文件

在前端开发中,我们经常需要设置一些配置文件来进行构建和部署。这些配置文件对于有经验的开发者来说可能已经准备好了,但初学者可能会对此有些困惑。不过,现在你可以尝试使用 ChatGPT 来生成这些配置文件,它会为你提供一套完整的配置模板,让你更轻松地进行前端开发。

🦋1.1 webpack

请给我一个完整的 webpack.config.js配置文件。
当然,以下是一个完整的 `webpack.config.js` 配置文件的示例。这个配置文件适用于一个基本的 React 应用,但你可以根据自己的需求进行修改和扩展。

```javascript
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const TerserPlugin = require('terser-webpack-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');

module.exports = {
  entry: './src/index.js', // 入口文件
  output: {
    path: path.resolve(__dirname, 'dist'), // 输出目录
    filename: 'bundle.[contenthash].js', // 输出文件名
    publicPath: '/', // 公共路径
  },
  mode: 'production', // 生产模式
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: 'babel-loader', // 使用 Babel 加载器
      },
      {
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, 'css-loader'], // 处理 CSS 文件
      },
      {
        test: /\.(png|jpg|gif|svg)$/,
        type: 'asset/resource', // 处理图片文件
      },
      {
        test: /\.(woff|woff2|eot|ttf|otf)$/,
        type: 'asset/resource', // 处理字体文件
      },
    ],
  },
  plugins: [
    new CleanWebpackPlugin(), // 清除输出目录
    new HtmlWebpackPlugin({
      template: './public/index.html', // 模板文件
      filename: 'index.html', // 输出文件名
    }),
    new MiniCssExtractPlugin({
      filename: '[name].[contenthash].css', // CSS 文件名
    }),
  ],
  optimization: {
    minimize: true, // 开启最小化
    minimizer: [
      new TerserPlugin(), // 压缩 JavaScript
      new CssMinimizerPlugin(), // 压缩 CSS
    ],
    splitChunks: {
      chunks: 'all', // 分割代码块
    },
  },
  devServer: {
    contentBase: path.join(__dirname, 'dist'), // DevServer 内容目录
    compress: true, // 启用 gzip 压缩
    port: 9000, // 端口号
    historyApiFallback: true, // 处理单页应用
  },
  resolve: {
    extensions: ['.js', '.jsx'], // 自动解析文件扩展名
  },
};
```javascript

### 主要部分解释:

1. **入口 (`entry`)**:指定 Webpack 的输入点,即应用的主文件。

2. **输出 (`output`)**:指定输出的目录和文件名格式。

3. **模式 (`mode`)**:指定构建模式(开发模式 `development` 或生产模式 `production`)。

4. **模块 (`module`)**:定义了各种文件类型的处理规则。示例中包括 JavaScript、CSS、图片和字体文件的处理。

5. **插件 (`plugins`)**:定义了各种插件,用于增强 Webpack 的功能。例如,`HtmlWebpackPlugin` 用于生成 HTML 文件,`CleanWebpackPlugin` 用于清理输出目录,`MiniCssExtractPlugin` 用于提取 CSS 文件。

6. **优化 (`optimization`)**:配置优化选项,包括代码最小化和分割代码块。

7. **开发服务器 (`devServer`)**:配置开发服务器,用于本地开发的便利。

8. **解析 (`resolve`)**:设置模块解析选项,如自动解析 `.js` 和 `.jsx` 文件扩展名。

根据你的具体需求,还可以进一步调整和扩展这个配置文件。

在这里插入图片描述
清注意,这只是一个基本的配置文件示例,具体的配置根据你的项目需求可能会有所不同。你可以根据需要添加或修改其他配置项。

🦋1.2 Nginx

Nginx配置文件,启动端口为8088,代理到本地服务端口3000,增加 HTTPS 配置。
以下是一个完整的 Nginx 配置文件示例,该配置文件将 Nginx 监听的端口设置为 `8088`,并将请求代理到本地服务的端口 `3000`,同时配置了 HTTPS。

```nginx
server {
    listen 8088 ssl;  # 监听 8088 端口,并启用 SSL

    server_name yourdomain.com;  # 替换为你的域名或 IP 地址

    ssl_certificate /etc/nginx/ssl/yourdomain.com.crt;  # SSL 证书文件路径
    ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key;  # SSL 证书密钥文件路径

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;  # 启用的 SSL 协议
    ssl_ciphers HIGH:!aNULL:!MD5;  # 加密套件

    location / {
        proxy_pass http://127.0.0.1:3000;  # 代理到本地 3000 端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Port $server_port;
    }

    # 静态资源缓存设置
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 7d;
        access_log off;
    }

    # 增加一些安全配置
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
}
```nginx

### 主要部分解释:

1. **`listen 8088 ssl;`**: Nginx 监听 `8088` 端口,并启用 SSL(HTTPS)。

2. **`server_name yourdomain.com;`**: 设置你的服务器域名或 IP 地址。

3. **`ssl_certificate` 和 `ssl_certificate_key`**: 指定 SSL 证书和密钥的路径。需要替换为你的实际文件路径。

4. **`ssl_protocols` 和 `ssl_ciphers`**: 设置支持的 SSL 协议和加密套件,保证连接的安全性。

5. **`proxy_pass http://127.0.0.1:3000;`**: 将所有请求代理到本地运行在 `3000` 端口的服务。

6. **`proxy_set_header`**: 这些指令设置了传递给后端服务器的 HTTP 头信息,帮助后端服务器了解请求的来源及相关信息。

7. **静态资源缓存 (`location ~* \.(jpg|jpeg|png|gif|ico|css|js)$`)**: 为静态资源设置缓存策略,减少服务器负载。

8. **安全头部配置**: 增加了一些常见的安全头部配置,增强网站安全性。

### 证书说明:

- 你需要在服务器上准备好 SSL 证书和密钥文件。可以通过 Let's Encrypt 免费获取 SSL 证书,也可以从其他证书颁发机构获取。

- 确保路径正确地指向 `.crt` 和 `.key` 文件。

配置完成后,重新加载 Nginx 服务即可生效。

```bash
sudo nginx -s reload
```bash

在这里插入图片描述

🦋1.3 tsconfg

给我一个完整的 tsconfg 配置文件。
以下是一个完整的 `tsconfig.json` 配置文件示例,适用于 TypeScript 项目。这个配置文件涵盖了常用的编译选项,你可以根据项目需求进行调整。

```json
{
  "compilerOptions": {
    "target": "ES6",                          // 指定 ECMAScript 目标版本
    "module": "CommonJS",                      // 指定模块系统:CommonJS、ES6、ESNext 等
    "lib": ["ES6", "DOM"],                     // 指定要包含在编译中的库文件
    "allowJs": true,                           // 允许编译 JavaScript 文件
    "checkJs": false,                          // 报告 JavaScript 文件中的错误
    "jsx": "react",                            // 指定 JSX 代码的转换方式: "react", "preserve", "react-native"
    "declaration": true,                       // 生成相应的 .d.ts 文件
    "sourceMap": true,                         // 生成对应的 .map 文件
    "outDir": "./dist",                        // 指定输出目录
    "rootDir": "./src",                        // 指定输入文件的根目录
    "strict": true,                            // 启用所有的严格类型检查选项
    "noImplicitAny": true,                     // 在表达式和声明上有隐含的 any 类型时报错
    "strictNullChecks": true,                  // 启用严格的 null 检查
    "strictFunctionTypes": true,               // 启用对函数类型的严格检查
    "strictBindCallApply": true,               // 启用对 bind、call 和 apply 方法的严格检查
    "strictPropertyInitialization": true,      // 启用严格的属性初始化检查
    "noImplicitThis": true,                    // 报告 this 表达式隐式 any 类型的错误
    "alwaysStrict": true,                      // 在模块中始终启用严格模式
    "noUnusedLocals": true,                    // 有未使用的局部变量时抛出错误
    "noUnusedParameters": true,                // 有未使用的参数时抛出错误
    "noImplicitReturns": true,                 // 并非所有函数中的代码路径都有返回值时抛出错误
    "noFallthroughCasesInSwitch": true,        // 报告 switch 语句的 fallthrough 错误
    "esModuleInterop": true,                   // 启用对 ES 模块语义的支持
    "skipLibCheck": true,                      // 跳过对库文件的类型检查
    "forceConsistentCasingInFileNames": true   // 禁止对同一文件的不一致引用
  },
  "include": [
    "src/**/*"                                 // 包含 src 目录中的所有文件
  ],
  "exclude": [
    "node_modules",                            // 排除 node_modules 目录
    "dist"                                     // 排除 dist 目录
  ]
}
```json

### 主要部分解释:

1. **`compilerOptions`**: 编译选项,控制 TypeScript 编译行为。

   - `target`: 指定 ECMAScript 的目标版本,如 `ES5`, `ES6`, `ESNext`。
   - `module`: 指定模块系统,如 `CommonJS`, `ES6` 等。
   - `lib`: 指定要包含在编译中的库文件,如 `ES6`, `DOM` 等。
   - `allowJs`: 允许编译 `.js` 文件。
   - `checkJs`: 报告 `.js` 文件中的错误。
   - `jsx`: 配置 JSX 代码的处理方式,通常用于 React 项目。
   - `declaration`: 生成 `.d.ts` 文件以供其他 TypeScript 文件使用。
   - `sourceMap`: 生成 `.map` 文件以支持调试。
   - `outDir`: 指定输出目录。
   - `rootDir`: 指定输入文件的根目录。
   - `strict`: 启用 TypeScript 的所有严格类型检查选项。
   - `noImplicitAny`: 禁止隐式 `any` 类型。
   - `strictNullChecks`: 启用严格的 `null` 检查。
   - `esModuleInterop`: 启用对 ES 模块语义的兼容性支持。
   - `skipLibCheck`: 跳过对声明文件的类型检查。
   - `forceConsistentCasingInFileNames`: 强制文件名的一致性。

2. **`include`**: 指定要包含在编译中的文件和目录。

3. **`exclude`**: 指定要排除在编译之外的文件和目录,如 `node_modules` 和 `dist` 目录。

这个 `tsconfig.json` 文件适合大多数 TypeScript 项目,尤其是使用 ReactNode.js 的项目。如果你有特殊需求,可以根据需要进行调整。

在这里插入图片描述

🦋1.4 vite

给我一个完整的 vite.config.js 配置文件。
以下是一个完整的 `vite.config.js` 配置文件示例,适用于使用 Vite 构建的项目。这个配置文件适用于 React 项目,但可以根据需求进行调整。

```javascript
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import path from 'path';

export default defineConfig({
  plugins: [react()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'), // 设置别名,使用 @ 代替 src 目录
    },
  },
  server: {
    host: '0.0.0.0', // 允许通过 IP 访问
    port: 3000, // 开发服务器端口
    open: true, // 自动打开浏览器
    proxy: {
      '/api': {
        target: 'http://localhost:8080', // 代理到后端服务
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, ''),
      },
    },
  },
  build: {
    outDir: 'dist', // 输出目录
    sourcemap: true, // 生成 sourcemap 文件
    rollupOptions: {
      output: {
        manualChunks: {
          vendor: ['react', 'react-dom'], // 将 react 和 react-dom 单独打包成 vendor.js
        },
      },
    },
  },
});
```javascript

### 主要部分解释:

1. **`plugins`**: 
   - `react()`: 使用 ViteReact 插件来支持 JSX 语法和其他 React 特性。

2. **`resolve`**: 
   - `alias`: 配置别名,可以在项目中使用 `@` 来代替 `src` 目录的路径,简化路径引用。

3. **`server`**: 
   - `host`: 设置为 `0.0.0.0` 允许通过局域网 IP 访问开发服务器。
   - `port`: 指定开发服务器的端口号。
   - `open`: 配置开发服务器启动时自动打开浏览器。
   - `proxy`: 配置代理,将以 `/api` 开头的请求转发到后端服务,且通过 `rewrite` 移除 `/api` 前缀。

4. **`build`**: 
   - `outDir`: 指定构建输出目录。
   - `sourcemap`: 启用 source map 文件生成,以支持调试。
   - `rollupOptions`: Vite 使用 Rollup 进行打包,可以通过该选项自定义打包行为。
     - `manualChunks`: 将 `react` 和 `react-dom` 单独打包成 `vendor.js`,以优化构建输出。

这个配置文件适用于大多数 React 项目,并且可以根据你的项目需求进行定制,例如增加更多插件、调整代理设置或修改构建输出的配置。

在这里插入图片描述

🔎2.快速构建正则表达式

🦋2.1 校验一个较复杂的密码规则

帮我写一个正则表达式:需要8~16位字符,同时包括数字、大小写字母和特殊字符,其中特殊字符最多不能超过3个,且需要在"@#$*_-+=:,.?[]{}"范围内,并给出对应的测试案例。
以下是一个符合你要求的正则表达式以及相应的测试案例:

### 正则表达式:
```regex
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@#$*_\-+=:,.?[\]{}])[A-Za-z\d@#$*_\-+=:,.?[\]{}]{8,16}$|^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@#$*_\-+=:,.?[\]{}])(?!.*[@#$*_\-+=:,.?[\]{}]{4,})[A-Za-z\d@#$*_\-+=:,.?[\]{}]{8,16}$
```regex

### 正则表达式解释:
1. `(?=.*[a-z])` - 至少包含一个小写字母。
2. `(?=.*[A-Z])` - 至少包含一个大写字母。
3. `(?=.*\d)` - 至少包含一个数字。
4. `(?=.*[@#$*_\-+=:,.?[\]{}])` - 至少包含一个特殊字符,范围为 `@#$*_-+=:,.?[]{}`
5. `[A-Za-z\d@#$*_\-+=:,.?[\]{}]{8,16}` - 整体长度在816个字符之间,包含大小写字母、数字、和指定的特殊字符。
6. `(?!.*[@#$*_\-+=:,.?[\]{}]{4,})` - 确保特殊字符不能超过3个。

### 测试案例:
```javascript
const testCases = [
  "Ab1@defg",            // valid: 8 characters, includes at least one lowercase, uppercase, digit, and special character
  "A1b#C2d*E",           // valid: 10 characters, includes required character types, and 3 special characters
  "Aa1@#*Aa",            // valid: 8 characters, 3 special characters
  "Aa1@#*Aa!",           // invalid: 4 special characters
  "abcD123$",            // valid: 8 characters, includes required character types, and 1 special character
  "aB1@cDefG!",          // invalid: 10 characters, includes 4 special characters
  "1Ab@C",               // invalid: less than 8 characters
  "aB1@cD_e#Fg2",        // valid: 12 characters, includes 3 special characters
  "abcdefgh12345678",    // invalid: no uppercase or special characters
  "ABCDEFGH12345678",    // invalid: no lowercase or special characters
  "AaBbCcDd1234@#",      // valid: 14 characters, includes required character types, and 2 special characters
];

testCases.forEach(test => {
  console.log(`${test}: ${/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@#$*_\-+=:,.?[\]{}])(?!.*[@#$*_\-+=:,.?[\]{}]{4,})[A-Za-z\d@#$*_\-+=:,.?[\]{}]{8,16}$/.test(test)}`);
});
```javascript

### 解释:
- 上述代码中,`testCases` 数组包含了一些测试字符串,每个字符串都经过正则表达式的验证,以确保它们是否符合要求。
- `console.log` 会输出每个测试字符串是否符合规则 (`true` 或 `false`)。

这个正则表达式将确保密码的安全性,同时限制特殊字符的使用。

在这里插入图片描述

🦋2.2 截取指定小数

给我一个JavaScript的正则表达式,截取n位小数,能四舍五入,并给出测试过程。
你可以使用以下 JavaScript 代码来创建一个正则表达式来截取 `n` 位小数,并进行四舍五入。这个例子中会使用 `toFixed(n)` 方法来实现四舍五入,正则表达式用于确保小数点后的精度。

### JavaScript 代码示例:

```javascript
function roundToNDecimals(number, n) {
  const regex = new RegExp(`^-?\\d+(\\.\\d{0,${n}})?`);
  return parseFloat(number.toFixed(n)).toString().match(regex)[0];
}

// 测试案例
const testCases = [
  { input: 123.456789, n: 2 },  // 123.46
  { input: 123.451, n: 2 },     // 123.45
  { input: -123.4567, n: 3 },   // -123.457
  { input: 0.9999, n: 3 },      // 1.000
  { input: 123, n: 2 },         // 123
  { input: -0.12345, n: 4 },    // -0.1235
  { input: 1.2345, n: 0 },      // 1
  { input: 1.9999, n: 0 },      // 2
];

testCases.forEach(({ input, n }) => {
  console.log(`Input: ${input}, N: ${n}, Result: ${roundToNDecimals(input, n)}`);
});
```javascript

### 测试过程解释:

1. **`toFixed(n)`**:
   - 这个方法会将数字四舍五入到指定的小数位数,然后返回一个字符串形式的结果。

2. **正则表达式**:
   - `^-?\\d+(\\.\\d{0,${n}})?`: 
     - `^-?`: 匹配可选的负号。
     - `\\d+`: 匹配一个或多个数字。
     - `(\\.\\d{0,${n}})?`: 匹配一个可选的小数点和最多 `n` 位小数。

3. **`parseFloat()`**:
   - 解析四舍五入后的数字并确保它是一个浮点数。

4. **测试案例**:
   - `123.456789, n: 2` 会返回 `123.46`,因为四舍五入后保留两位小数。
   - `-123.4567, n: 3` 会返回 `-123.457`,因为四舍五入后保留三位小数。
   - `1.9999, n: 0` 会返回 `2`,因为四舍五入后没有小数。

### 结果解释:

- 该函数 `roundToNDecimals` 能够对给定的数字进行四舍五入并保留指定的 `n` 位小数。通过正则表达式和 `toFixed` 方法的结合,确保了结果的精度和格式。

这段代码适用于需要对数字进行四舍五入并控制小数位数的场景。

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。