Vue项目配置文件整理

时间:2022-12-04 07:54:41

Vue项目配置文件整理

一、.babelrc

1、文件简介1

配置Babel的文件
基本格式:

{
  "presets":[], // 预设: 语法转译器/jsx,flow,TypeScript 等插件转译器
  "plugins":[]  // 插件: API 和全局对象转译器
}

Babel有三种配置方式:

1)创建babel.config.js文件进行配置
2)创建.babelrc文件进行配置
3)通过package.json文件中的babel字段进行设置

2、项目功能

{
    "presets": [
        "@vue/cli-plugin-babel/preset"
    ],
    "plugins": [
        "@babel/plugin-transform-runtime"
    ]
}

@vue/cli-plugin-babel/preset2

vue-cli特有的Babel插件,是vue-cli项目的默认Babel预设,也只能用在vue-cli脚手架搭建的项目中。

node_modules中内容为:

module.exports = require('@vue/babel-preset-app')

所有的vue-cli应用都使用@vue/babel-preset-app,它是对 @babel/preset-env等转译库的重新封装,且依赖于.browserslistrc文件的配置(也就是package.json中的browserslist字段)。

@babel/plugin-transform-runtime3 4

Babel 在转译的过程中,对 syntax 的处理会使用到 helper 函数,对 api 的处理会引入 polyfill。

默认情况下,Babel 在每个需要使用 helper 的地方都会定义一个 helper,导致最终的产物里有大量重复的 helper;引入 polyfill 时会直接修改全局变量及其原型,造成原型污染。

故该转译包将 helper 和 polyfill 都改为从一个统一的地方引入,并且引入的对象和全局变量是完全隔离的,从而解决上述两个问题。

3、小结

可迁移到package.json

二、.editorconfig

1、文件简介1 2

统一编码风格的文件,使用vscode编辑器需要安装editorConfig插件此文件才生效,优先级比编辑器自身的设置要高

要保持和lint配置相符,否则格式化代码以后不能通过代码校验工具的检验

2、项目功能

root = true                      // 表示是最顶层的配置文件,否则会继续向父目录找editorconfig文件[*]                              // 匹配所有文件
charset = utf-8                  // 设置编码
indent_style = space             // 设置缩进风格(tab是硬缩进只占一个字符,space为软缩进)
indent_size = 2                  // 设置缩进宽度
end_of_line = lf                 // 设置换行符
insert_final_newline = true      // 文件会以一个空白行结尾  
trim_trailing_whitespace = false // 不去除换行行首的任一空白字符

3、小结

总的能配置的内容差不多就这么多,且一直并没有下载插件所以根本没有用到

可考虑将必要的放到.prettierrc后删去

三、.eslintignore

1、文件简介1

eslint+ignore,告诉 ESLint 去忽略特定的文件和目录

.eslintignore 文件是一个纯文本文件,其中的每一行都是一个 glob 模式表明哪些路径应该忽略检测

定义方式:

1)根目录创建.eslintignore 文件
2)在 package.json 文件中加入 eslintignore 字段
3)两者可同时存在但.eslintignore 文件优先级更高

2、项目功能

/dist/                   // 忽略.gitignore文件同目录下(即根目录下)的dist文件夹下的所有目录,当前无这个文件夹
/*.js                    // 忽略根目录下所有的js文件
/test/unit/coverage/     // 忽略根目录下的test/unit/coverage文件夹下的所有目录,当前无这个文件夹
jquery.fileDownload.js   // 忽略此命名的文件
/.ci/                    // 忽略根目录下的.ci文件夹下的所有目录
/static/lib              // 忽略根目录下static/lib下的所有目录

3、小结

/dist/与/test/unit/coverage/ 删除

四、.eslintrc.js

1、文件简介1

配置eslint代码格式和代码质量校验的文件,

eslint有四种配置方式:

1).eslintrc.js
2).eslintrc.yaml
3).eslintrc.json
4)package.json eslintConfig

可叠加配置,距离近者优先级高,4)优先级最低

2、项目功能

module.exports = {
  env: {
    browser: true,
    es2021: true,
  },
  extends: [
    'plugin:vue/essential',
  ],
  parserOptions: {
    ecmaVersion: 12,
    sourceType: 'module',
  },
  plugins: [
    'vue',
  ],
  globals: {
    $: true,
    _: true,
    moment: true,
    Highcharts: true,
    XLSX: true,
  },
  rules: {
    camelcase: 0,
    'prefer-const': 0,
    'arrow-body-style': 0,
    'no-new': 1,
    'new-cap': 0,
    'prefer-destructuring': 0,
    'no-underscore-dangle': 0,
    'func-style': 0,
    'no-console': ['error', { allow: ['log', 'warn', 'error'] }],
    'no-unused-vars': ['error', { vars: 'all', args: 'none', ignoreRestSiblings: false }],
    'max-len': 1,
    'no-useless-escape': 0,     // 允许在字符串、模板字面量和正则表达式中使用转义符
    'no-mixed-operators': 0,    // 可以混合使用不同的操作符,比如加号和乘号
    'operator-linebreak': 0,    // 允许操作员不强制使用一致的换行符样式
    'newline-per-chained-call': 0,
    'max-len': 0,
    'no-else-return': 0,
    'no-param-reassign': 0,
    'import/prefer-default-export': 0,
    'no-restricted-syntax': 0,
    'no-loop-func': 0,
    eqeqeq: 0,
  },
};

env:指定脚本的运行环境。每种环境都有一组特定的预定义全局变量。比如node环境下有global全局变量,browser环境下有window全局变量,jquery环境下有$全局变量,es6环境下有Set等新特性全局变量

extends:集成的配置方案,可以看成plugins+rules

plugins:加载一些用于补充规则的插件。可省略前缀 eslint-plugin-

rules:配置eslint默认提供的可选规则和插件里需要的规则。

"off"或0- 关闭规则

"warn"或1- 开启规则,使用警告级别的错误:warn(不会导致程序退出)

"error"或2- 开启规则,使用错误级别的错误:error(当被触发的时候,程序会退出)

parserOptions:用来设置支持的ECMAScript语言版本。这里12是ES2021的意思

globals:配置一些全局变量。赋值writable/true允许重写,readonly/false不允许重写

3、小结

保留

五、.gitignore

1、文件简介1

git+ignore,使在提交代码时忽略列出的相关文件

2、项目功能

.DS_Store
node_modules/
dist/
target/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
eslint.html
​
# Editor directories and files
.idea
*.suo
*.ntvs*
*.njsproj
*.sln

3、小结

dist/、target/ 可删去

六、.huskyrc.js、.lintstagedrc.js、commitlint.config.js

1、文件简介1 2

.huskyrc.js是 Husky 的配置文件,通过安装 Husky 把配置文件和 Git Hook 关联从而在团队中使用 Git Hook,当前版本Husky4

.lintstagedrc.js是 git add 内容代码格式校验的配置文件

commitlint.config.js 是 commit 信息格式校验的配置文件

2、项目功能

// .huskyrc.js
module.exports = {
  "hooks": {
    "pre-commit": "lint-staged",
    'commit-msg': 'commitlint -E HUSKY_GIT_PARAMS'
  }
};// .lintstagedrc.js
module.exports = {
  '*.{js,vue,ts}': 'eslint --fix',
};// commitlint.config.js
module.exports = { extends: ['@commitlint/config-conventional'] };

git commit执行前进行代码格式校验,

pre-commit:git add 内容代码格式校验

               '*.{js,vue,ts}': 'eslint --fix': 自动修复 js,vue,ts 文件并提交更改

commit-msg:commit 信息格式校验

               '@commitlint/config-conventional': 校验 commit 信息风格的组件

3、小结

1)考虑当前Husky版本为4,可以将三个文件合并到package.json中,

2)或者更新版本如Husky8,这三个文件将可以合并在一个 .husky 文件夹中

七、.postcssrc.js

1、文件简介1 2

PostCSS 的主要功能:

把 CSS 解析成 JavaScript 可以操作的 AST
调用插件来处理 AST 并得到结果

2、项目功能

module.exports = {
  "plugins": {
    // to edit target browsers: use "browserslist" field in package.json
    "autoprefixer": {}
  }
}

“autoprefixer” 将基于当前浏览器范围为 transform 等css样式加上浏览器前缀

浏览器范围在 package.json 中的 browserslist 字段

3、小结

可迁移至package.json

八、.prettierrc.js

1、文件简介1 2

代码格式的校验,eslint+–fix 也可以进行代码格式的校验和自动格式化,但 Prettier 更擅长

Prettier 可能与 ESLint 冲突

2、项目功能

module.exports = {
  // 一行最多 120 字符
  printWidth: 120,
  // 使用 2 个空格缩进
  tabWidth: 2,
  // 不使用缩进符,而使用空格
  useTabs: false,
  // 行尾需要有分号
  semi: true,
  // 使用单引号
  singleQuote: true,
  // 对象的 key 仅在必要时用引号
  quoteProps: 'as-needed',
  // jsx 不使用单引号,而使用双引号
  jsxSingleQuote: false,
  // 末尾需要有逗号
  trailingComma: 'all',
  // 大括号内的首尾需要空格
  bracketSpacing: true,
  // jsx 标签的反尖括号需要换行
  jsxBracketSameLine: false,
  // 箭头函数,只有一个参数的时候,也需要括号
  arrowParens: 'avoid',
  // 每个文件格式化的范围是文件的全部内容
  rangeStart: 0,
  rangeEnd: Infinity,
  // 不需要写文件开头的 @prettier
  requirePragma: false,
  // 不需要自动在文件开头插入 @prettier
  insertPragma: false,
  // 使用默认的折行标准
  proseWrap: 'preserve',
  // 根据显示样式决定 html 要不要折行
  htmlWhitespaceSensitivity: 'css',
  // vue 文件中的 script 和 style 内不用缩进
  vueIndentScriptAndStyle: false,
  // 换行符使用 lf
  endOfLine: 'lf',
};

3、小结

保留

但由于与 ESLint 可能冲突,解决冲突的方式:

一是禁掉 ESLint 中与 Prettier 冲突的规则,然后使用 Prettier 做格式化, ESLint 做代码校验

二是只使用禁掉了冲突规则的 ESLint,将 Prettier 作为插件加到 .eslintrc.js 使得 eslint --fix 可以既处理代码格式问题又处理代码质量问题

九、build.boot

1、文件简介1 2

函数式编程clojure基于boot构建应用程序,build.boot是boot环境默认的配置文件

2、项目功能

(set-env!
  :dependencies '[[org.clojure/clojure "1.8.0"]
                  [org.clojure/tools.logging "0.3.1"]
                  [erp-boot/boot-gramel "1.0-SNAPSHOT" :scope "test"]])
​
​
(require '[boot.gramel :refer :all])(set-env!
  :project 'erp.webapps/xxx
  :version "0.1.0-SNAPSHOT"
  :resource-paths #(conj % "dist"))

一般结构如下,通过下载 pom、jar 完成构建,而项目文件里没有这样的 task-options! 操作,且依赖的 erp-boot/boot-gramel 或者是自定义的 boot.gramel 任务文件无迹可寻,resource-paths 的 dist 目录也不在项目里 ,猜测是最初搭建数全通项目SNAPSHOT开发版本时用于提供运行时环境,但现在是否使用还有待考证

(set-env!
  :resource-paths #{"src"}
  :dependencies '[[me.raynes/conch "0.8.0"]])(task-options!
  pom {:project 'my-project
       :version "0.1.0"}
  jar {:manifest {"Foo" "bar"}})

3、小结

若当前未使用到可删除

十、jsconfig.json

1、文件简介1 2

在根目录创建 jsconfig.json 文件,使得 vs code 能将 jsconfig.json 所在的 javascript 项目视作一个整体做智能代码提示

2、项目功能

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      // 解决项目中使用@作为路径别名,导致vscode无法跳转文件的问题
      "@/*": [
        "src/*"
      ]
    },
    // 解决prettier对于装饰器语法的警告
    "experimentalDecorators": true,
    // 解决.jsx文件无法快速跳转的问题
    "jsx": "preserve"
  },
  "vueCompilerOptions": {
    "target": 2.7,
    "plugins": [
      // vscode支持pug
      "@volar/vue-language-plugin-pug"
    ]
  },
  //提高 IDE 性能
  "exclude": [
    "node_modules",
    "dist",
    "build",
    "docker",
    "config"
  ]
}

3、小结

保留

十一、webpack.dll.js

1、文件简介1

利用 DllPlugin 插件的 webpack 打包优化策略生成的dll文件

把公共库打包成一个单独的库文件,每次只需打包业务代码,减少公共打包的时间,提升整体速度

2、项目功能

const path = require('path');
const DllPlugin = require('webpack/lib/DllPlugin');
const RemoveNgGridMissingLicenseErrorPlugin = require('./build/RemoveNgGridMissingLicenseErrorPlugin');
​
module.exports = {
  mode: 'production',
  // JS 执行入口文件
  entry: {
    dll_vendor: [
      'ag-grid-vue',
      'ant-design-vue',
      'vue-router',
      'vuex',
      'axios',
      'vue-resource',
      'tinymce',
      'tinymce/themes/silver',
      'tinymce/plugins/table',
      'tinymce/plugins/lists',
      'tinymce/plugins/link',
      'tinymce/plugins/image',
      'tinymce/plugins/imagetools',
      'tinymce/plugins/media',
      'tinymce/plugins/code',
      'tinymce/plugins/codesample',
      'tinymce/plugins/anchor',
      'tinymce/plugins/emoticons/js/emojis.min',
      'tinymce/plugins/emoticons',
      'tinymce/plugins/wordcount',
      'tinymce/plugins/preview',
      'tinymce/plugins/fullpage',
      'tinymce/plugins/fullscreen',
      'tinymce/plugins/paste',
      'ag-grid-community',
      'ag-grid-enterprise',
      'cos-js-sdk-v5',
    ],
  },
  output: {
    // 输出的动态链接库的文件名称,[name] 代表当前动态链接库的名称,
    // 也就是 entry 中配置的 react 和 polyfill
    filename: '[name].dll.js',
    // 输出的文件都放到 dist 目录下
    path: path.resolve(__dirname, 'static/lib/dll'),
    // 存放动态链接库的全局变量名称,例如对应 react 来说就是 _dll_react
    // 之所以在前面加上 _dll_ 是为了防止全局变量冲突
    library: '_dll_[name]',
  },
  plugins: [
    new RemoveNgGridMissingLicenseErrorPlugin(),
    // 接入 DllPlugin
    new DllPlugin({
      // 动态链接库的全局变量名称,需要和 output.library 中保持一致
      // 该字段的值也就是输出的 manifest.json 文件 中 name 字段的值
      // 例如 react.manifest.json 中就有 "name": "_dll_react"
      name: '_dll_[name]',
      // 描述动态链接库的 manifest.json 文件输出时的文件名称
      path: path.join(__dirname, 'static/lib/dll', '[name].manifest.json'),
    }),
  ],
};

entry: 配置要打包的公共库文件
output: 文件输出配置,其中filename是文件的打包输出名称,path是输出的路径,library是打包后库的名称
plugins: webpack插件,这里使用DllPlugin将dll_vendor里的库文件打包成dll文件,其中,name是库的名称和output.library要保持一致,path是dll文件的映射json,作用是映射库名称和他对应的node_module里的路径

3、小结

保留

十二、其他

index.html

整个项目的入口,保留

package-lock.json

锁定安装模块的版本号,保留

package.json

配置信息,保留

README.md

说明文档,保留