likes
comments
collection
share

组件工程配置 eslint、typescript 和 polyfill

作者站长头像
站长
· 阅读数 24

前言

更新目录结构

  • 根目录创建src文件夹,然后把packagesutils移动到src下,这样跟组件相关的代码统一维护到src下,后续src下可能还会新增如下目录等

    • apis:存放与后端通信的api
    • assets:存放静态资源
    • components:存放公共组件
    • configs:存放项目的配置文件
    • hooks:存放自定义的hooks文件
    • plugins:存放插件的配置文件
    • styles:存放css或scss样式文件
    • types:存放typescript类型声明文件
  • 为了让工程正常的运行和打包,需要修改如下文件的引入路径

    • webpack.config.js读取组件入口增加src一层,alias里只保留@对应src目录即可 组件工程配置 eslint、typescript 和 polyfill
    • examples/App.vue引入组件的路径从 @p 改为 @/packages 组件工程配置 eslint、typescript 和 polyfill
    • examples/main.js的 @e/ 改为 ./ 组件工程配置 eslint、typescript 和 polyfill
    • src/packages/utils下的两个脚本文件,输出的路径也都需要增加src一层 组件工程配置 eslint、typescript 和 polyfill
  • 以上更新完后,在终端内无论npm run dev本地启动还是npm run build打包都能正常进行了,后续也会以新的目录结构补充内容

配置eslint

  • 安装相关依赖包
    • 基于webpack5配置eslint,首先需要安装 eslinteslint-webpack-plugin
    npm i eslint eslint-webpack-plugin -D
    
    • 配置了babel进行语法转换,所以需要安装 @babel/eslint-parser 解析器
    npm i @babel/eslint-parser -D
    
    • 需要对vue文件进行静态分析,所以需要安装 eslint-plugin-vue 插件
    npm i eslint-plugin-vue -D
    
    • 为了保证eslint规则和prettier的格式化规则保持一致,需要安装 eslint-plugin-prettiereslint-config-prettier
    npm i eslint-plugin-prettier eslint-config-prettier -D
    
  • webpack.config.js配置 eslint-webpack-plugin 如下图,初始化时需要传参配置extensions,默认是只对js文件进行检查的,需要添加上vue,后续配置typescript还需要添加ts,其他参数配置可参考github.com/webpack-con… 组件工程配置 eslint、typescript 和 polyfill
  • 根目录添加 .eslintrc.js 文件,具体配置如下,其他配置可参考eslint.org/
module.exports = {
    // 根目录指示
    root: true,
    // 环境配置
    env: {
        browser: true,
        node: true
    },
    // 继承的规则
    extends: [
        'plugin:vue/essential', // Vue.js相关的必要规则
        'eslint:recommended', // 推荐的ESLint规则
        'plugin:prettier/recommended' // Prettier插件的推荐配置
    ],
    // 解析选项
    parserOptions: {
        parser: '@babel/eslint-parser', // 使用Babel解析器
        requireConfigFile: false // 是否需要配置文件
    },
    // 规则配置
    rules: {
        'no-console': // 禁止console
            process.env.NODE_ENV === 'production'
                ? ['warn', { allow: ['warn', 'error'] }] // 生产环境下,允许警告和报错
                : 'off', // 非生产环境下关闭
        'no-debugger': // 禁止debugger
            process.env.NODE_ENV === 'production'
                ? 'warn' // 生产环境下,允许警告
                : 'off', // 非生产环境下关闭
        'vue/multi-word-component-names': 'off', // Vue组件名使用多个单词时关闭警告
        camelcase: 'off', // 关闭强制驼峰命名
        'no-lonely-if': 'off', // 关闭孤立的if语句的警告
        'no-new': 'off' // 关闭直接使用new操作符创建实例的警告
    },
    // 文件覆盖规则
    overrides: [
        {
            files: ['*.html'], // 匹配HTML文件
            rules: {
                'vue/comment-directive': 'off' // 关闭Vue指令注释的警告
            }
        }
    ]
};
  • 根目录添加 .eslintignore 文件,具体配置如下,用来告诉eslint忽略哪些文件和目录
/node_modules
/dist
  • 根目录添加 .prettierrc 文件,具体配置如下,用来配置prettier的格式化规则,其他配置可参考prettier.io/docs/en/con…
    • tabWidth:指定缩进大小为几个空格
    • semi:添加分号
    • singleQuote:使用单引号
    • trailingComma:在对象和数组最后一个元素后不添加逗号
{
    "tabWidth": 4,
    "semi": true,
    "singleQuote": true,
    "trailingComma": "none"
}
  • 按照上述配置完成后,代码中有问题就会在终端提示报错或警告,如下图所示 组件工程配置 eslint、typescript 和 polyfill

配置typescript

  • 首先需要安装typeScript编译器和加载器
npm i typescript ts-loader -D
{
    "compilerOptions": {
        "baseUrl": ".",
        "allowJs": true,
        "sourceMap": true,
        "skipLibCheck": true,
        "target": "ES5",
        "module": "ESNext",
        "moduleResolution": "Node",
        "esModuleInterop": true,
        "types": ["node"],
        "paths": {
            "@/*": [
                "src/*"
            ]
        },
        "lib": [
            "ES5",
            "DOM"
        ]
    },
    "include": [
        "**/*.ts",
        "**/*.d.ts",
        "**/*.vue",
    ],
    "exclude": [
        "node_modules",
        "dist"
    ]
}
  • 目录文件改造
    • examples/main.js 改成 main.ts
    • src/packages/child1/index.js 和 src/packages/child2/index.js 的 index.js 都改成 index.ts
    • src/packages/child1/index.vue 和 src/packages/child2/index.vue 的 script 标签都增加 lang="ts",如下图 组件工程配置 eslint、typescript 和 polyfill
    • src/packages/main.js 改成 main.ts
    • src里新增types文件夹,用于存放typescript类型声明文件;再在types文件夹里新增vue-shim.d.ts文件用于需要声明vue文件,内容如下
      declare module '*.vue' {
          import Vue from 'vue';
          export default Vue;
      }
      
    • src/utils/getAsyncEntries.js 和 src/utils/getSyncEntries.js 里输出组件入口的文件后缀改成 .ts,如下图变化 组件工程配置 eslint、typescript 和 polyfill
    • webpack.config.js变化如下图,所有入口 main.js 改成 main.ts,增加解析文件顺序的配置,及添加对 .ts 结尾的文件处理的加载器,特别注意需要配置 appendTsSuffixTo 组件工程配置 eslint、typescript 和 polyfill

eslint支持typescript

  • 配置完typescript后,还需要重新配置一下eslint,首先需要安装 @typescript-eslint/eslint-plugin@typescript-eslint/parser
npm i @typescript-eslint/eslint-plugin @typescript-eslint/parser -D
  • 更新 .eslintrc.js 如下,其他配置可参考eslint.org/
module.exports = {
    // 根目录指示
    root: true,
    // 环境配置
    env: {
        browser: true, // 浏览器环境
        node: true // Node.js 环境
    },
    // 继承的规则
    extends: [
        'eslint:recommended', // 推荐的ESLint规则
        'plugin:@typescript-eslint/recommended', // TypeScript推荐规则
        'plugin:vue/essential', // Vue.js相关的必要规则
        'plugin:prettier/recommended' // Prettier插件的推荐配置
    ],
    // 解析选项
    parser: 'vue-eslint-parser', // 使用vue-eslint-parser解析器
    parserOptions: {
        parser: '@typescript-eslint/parser', // 使用@typescript-eslint/parser解析器
        ecmaVersion: 2021, // ECMAScript版本
        sourceType: 'module' // 模块类型
    },
    // 插件配置
    plugins: ['@typescript-eslint', 'vue'], // 使用的插件
    // 规则配置
    rules: {
        'no-console': // 禁止console
            process.env.NODE_ENV === 'production' // 生产环境下
                ? ['warn', { allow: ['warn', 'error'] }] // 警告,允许warn和error
                : 'off', // 非生产环境下关闭
        'no-debugger': // 禁止debugger
            process.env.NODE_ENV === 'production' // 生产环境下
                ? 'warn' // 警告
                : 'off', // 非生产环境下关闭
        'vue/multi-word-component-names': 'off', // Vue组件名使用多个单词时关闭警告
        camelcase: 'off', // 关闭强制驼峰命名
        'no-lonely-if': 'off', // 关闭孤立的if语句的警告
        'no-new': 'off', // 关闭直接使用new操作符创建实例的警告
        '@typescript-eslint/no-explicit-any': 'off', // 关闭显示any类型的警告
        '@typescript-eslint/no-this-alias': 'off' // 关闭使用this别名的警告
    },
    // 文件覆盖规则
    overrides: [
        {
            files: ['*.html'], // 匹配HTML文件
            rules: {
                'vue/comment-directive': 'off' // 关闭Vue指令注释的警告
            }
        }
    ]
};
  • webpack.config.js增加对ts文件检查 组件工程配置 eslint、typescript 和 polyfill

配置polyfill

  • 为了兼容老版本的浏览器,还需要引入babel的核心包core-js
npm i core-js -S

总结

转载自:https://juejin.cn/post/7366293382270517258
评论
请登录