如何使用自动格式化,整理,测试和自动生成的文档来设置前端项目


俄语原文


即使您独自工作,保持代码的一致性和格式正确也不是一件容易的事。 但是,当您与团队或开源项目一起工作时,一切都会变得越来越困难。 每个人都有自己的代码风格,没有人运行测试,没有人编写文档。 本文将帮助您设置所有这些内容,甚至更多-自动执行此例程,以免手动执行。


阅读后,您将获得具有以下功能的自己的npm-ready项目:


  • 文字格式和代码样式
  • 具有代码覆盖率和阈值的自动化测试
  • 统一提交样式
  • 根据代码和提交生成的文档
  • 自动化的发布过程

走吧


先决条件


创建一个新文件夹,初始化新存储库,进行项目并转到下一步。


git init npm init npm i -D typescript ./node_modules/.bin/tsc --init 

代码格式化


让我们从代码格式开始-缩进类型,大小等。 第一个工具是.editorconfig文件。 除了您的IDE外,它不需要任何其他内容,并且可以帮助您在整个团队中保持自动格式的一致性。


在项目的根目录中使用下一个内容创建.editorconfig(可以根据需要的样式进行更改)


 #root = true [*] indent_style = space end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true max_line_length = 100 indent_size = 4 [*.md] trim_trailing_whitespace = false 

这确实很棒,但有时功能不足,无法满足您的需求。 为了确保所有格式都更漂亮,它们会出现。 如果您忘记格式化代码,则漂亮的代码会为您完成。


 npm i -D prettier 

将此命令添加到package.json文件的scripts部分


 "prettier": "prettier --config .prettierrc.json --write src/**/*.ts" 

并将带有设置的.prettierrc.json文件添加到项目的根目录


 { "tabWidth": 4, "useTabs": false, "semi": true, "singleQuote": true, "trailingComma": "es5", "arrowParens": "always" } 

现在,您可以编写一些代码,然后尝试运行“ npm run prettier”。 Prettier将检查src文件夹并自动格式化代码,而无需您的任何帮助!


代码风格


代码样式-避免使用==而不是===或阴影变量也需要检查。 为此,我们将使用tslint 。 如果您更喜欢javascript,请改用eslint


 npm i -D tslint ./node_modules/.bin/tslint --init 

最后一条命令将为您创建tslint.json文件。 它保留您的设置,并且已经扩展了tslint:建议的规则集,但是您可以根据需要扩展或覆盖它们。 不要忘记在您的package.json中添加lint命令。


package.json


 "lint": "tslint -c tslint.json 'src/**/*.ts' 'tests/**/*.spec.ts'" 

如您所见,它的设置可以与src和tests文件夹一起使用,因此所有代码都应放在此处。


测试中


现在是时候进行测试了。 安装业力和其他相关依赖项


 npm i -D karma karma-jasmine jasmine karma-typescript karma-chrome-launcher @types/jasmine ./node_modules/.bin/karma init 

并将新的配置块添加到新创建的karma.conf.js中


karma.conf.js
 karmaTypescriptConfig : { include: ["./src/**/*.ts", "./tests/**/*.spec.ts"], tsconfig: "./tsconfig.json", reports: { "html": "coverage", "lcovonly": { directory: './coverage', filename: '../lcov.dat' } }, coverageOptions: { threshold: { global: { statements: 60, branches: 60, functions: 60, lines: 60 }, file: { statements: 60, branches: 60, functions: 60, lines: 60, } } }, } 

这将设置代码覆盖率文件和阈值级别。 两者都很重要。 第一个帮助您处理承保范围,第二个使您的承保范围保持一定水平。


更新package.json


 "test": "karma start" 

并尝试运行它。 不要忘记在src文件夹中编写一些代码,并在tests文件夹中编写测试。 这是您的代码覆盖率报告的样子:



顺便说一句,如果您打算使用持续集成(例如Travis,Jenkins等),最好将Chrome浏览器运行器更改为HeadupChrome with puppeteer 。 有关HeadlessChrome和CI的更多信息-在GitHub上查看我的演示存储库


提交风格


通常,所有写提交都采用某种“随机”格式。 因此,为了使提交足够好,就发明了commitizen 。 该工具提示一些问题并为您生成提交。 我们可以从在commitizen的帮助下编写的提交生成更改日志文件的另一个好处。


安装commitizen和常规的changelog适配器


 npm i -D commitizen npm i -D cz-conventional-changelog 

更新脚本


 "commit":"git-cz" 

在package.json中添加新的配置部分以进行commitizen。


 "config": { "commitizen": { "path": "./node_modules/cz-conventional-changelog" } } 

尝试进行提交或检查此图像以了解其外观:



文献资料


如果您的项目大于几个功能,那么最好有一些文档。 当您不需要手动编写内容时,它甚至会更好。 为此,存在typedoc 。 它使用您的.ts文件,您的jsdoc注释并创建漂亮而闪亮的文档。 如果您使用的是JavaScript,则可以尝试使用esdoc


这是一个示例,typedoc如何描述我的函数isNumberStrict:



 npm i -D typedoc 

package.json


 "doc": "typedoc --out docs/src" 

另一个好主意是也使更改日志文件也自动生成。 如前所述,commitizen支持常规更改日志。 因此,我们可以进行提交并将其转换为更改日志文件。


安装常规的changelog-cli


 npm i -D conventional-changelog-cli 

并使用新命令更新package.json


 "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s" 

不用担心,角度意味着仅样式格式化,仅此而已。 现在,您的变更日志将如下所示:



建立


构建非常简单,只需将build和clean命令添加到package.json中即可。


 "clean":"rmdir dist /S /Q", "build": "tsc --p ./ --sourceMap false", 

如果需要捆绑或缩小,请尝试uglifyjs


自动化技术


好的,大部分已经完成。 我们创建了许多不同的脚本来保持代码的清洁和正确。 但是,每次手动运行它们都是一项很无聊的任务,并且可能导致错误。 因此,我们需要使它们自动化。 如您所知,当您进行提交时,会出现一些git事件-提交前,提交后等等。 在提交或推送代码之前,我们可以使用它们来运行我们自己的脚本。 但是有一个问题-git钩子不可共享。 这就是为什么沙哑的出现。 这个包包装了git事件并从package.json运行脚本。 如果脚本失败,提交将被取消,并且您会收到消息,指出出了什么问题。


安装沙哑


 npm i -D husky 

并描述package.json中的一些钩子


 "precommit":"npm run prettier", "prepush": "call npm run lint && call npm run test" 

现在,当您尝试进行更漂亮的提交时,它将运行并修复所有格式问题。 当您尝试进行推送时-代码样式和测试将自动完成。 您可以根据需要扩展此命令,例如发送通知,额外检查等。


发布


太好了,我们快完成了。 因此,假设我们已经准备好将软件包发布到npm。 如您所知,在进行测试,文档更新,版本和标签更新之前,应该做很多工作。 容易忘记的东西,是吗? 因此,也可以自动执行此过程。 为此,我们将使用本地npm挂钩-预先版本,版本和后期版本。 在package.json的脚本部分添加下一行


 "preversion": "npm run test", "version": "call npm run clean && call npm run build && call npm run doc && call npm run changelog && git add . && git commit -m 'changelogupdate' --no-verify", "postversion": "git add . && git push && git push --tags" 

当您运行npm version命令时,preversion脚本将运行测试,version脚本将构建您的代码并生成所有文档。 然后将增加版本,然后将所有内容提交并推出。 现在,您只需要运行npm publish命令即可。 仅执行命令,其他一切都将在您身边不费吹灰之力地完成。


最后,我们需要指定项目中应包含哪些文件夹以及入口点可以位于何处。 上次更新package.json


 "main": "./dist/index.min.js", "types": "./dist/index.d.ts", "files": [ "dist/", "src/", "tests/" ] 

就是这样,您的出色项目已准备就绪!




感谢您的阅读。 如有任何疑问,请在此处查看我的演示存储库或提出评论。


祝你有美好的一天!

Source: https://habr.com/ru/post/zh-CN436176/


All Articles