рд╣рд╛рдп, рд╣реИрдмреНрд░ред рдпрд╣ рд▓реЗрдЦ рдирд╡реАрдирддрдо рддрдХрдиреАрдХ рдХреЗ рд╕рд╛рде рд╣реИрд▓реЛ рджреБрдирд┐рдпрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдорд┐рд▓реЗрдЧреА рдЬреЛ:
- рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
- рдХреЛрдбрд╕реНрдЯрд╛рдЗрд▓ рдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░рддрд╛ рд╣реИ
- рдПрдХ рдЧреЛрджреА рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ
- рдкрд░реАрдХреНрд╖рдг рдЖрдпреЛрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ
рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛
рдирдП рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, git рдФрд░ npm рдЖрд░рдВрдн рдХрд░реЗрдВ
git init npm init
рдЬрдм npm рдХреА рд╕реНрдерд╛рдкрдирд╛
package name: (bestlibever) version: (1.0.0) 0.1.0 description: Best lib forever entry point: (index.js) test command: jest git repository: keywords: author: >MAX_ (maximmasterr) license: (ISC) MIT
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдВрд░рдЪрдирд╛
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ рд╣реЛрдВрдЧреА:
- src - рдпрд╣рд╛рдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдлрд╛рдЗрд▓реЗрдВ рдЦреБрдж рд╣реЛрдВрдЧреА (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ)
- lib - рдпрд╣рд╛рдБ tsc рд╕рдВрдХрд▓рд┐рдд рдлрд╛рдЗрд▓реЛрдВ рдХреЛ src рд╕реЗ рдбрд╛рд▓реЗрдЧрд╛
- рдкрд░реАрдХреНрд╖рдг - рдпрд╣рд╛рдБ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ
- рдЙрджрд╛рд╣рд░рдг - рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг
рдЖрдкрдХреЛ .gitignore
рдХреЛ рднреА рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
lib/ node_modules/
рдЯрд╛рдЗрдкрдкреНрд░рддрд┐
рдЕрдм рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:
npm i typescript -D
рдФрд░ tsconifg.json
рдирд╛рдордХ рдПрдХ рдлрд╛рдЗрд▓ tsconifg.json
{ "compilerOptions": { "target": "es5", "module": "commonjs", "declaration": true, "outDir": "./lib", "strict": true, "sourceMap": true }, "include": ["src"], "exclude": ["node_modules", "**/__tests__/*"] }
рдЕрдм рдореБрдЦреНрдп рдлрд╛рдЗрд▓ рдХреЛ src/index.ts
export function helloWorld(){ return 'Hello world!' }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ package.json
рдЬреЛрдбрд╝реЗрдВ:
"build": "tsc", "dev": "tsc --watch"
рдЕрдм рд╣рдо рдПрдХ-рдмрд╛рд░ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
npm run build
рдФрд░ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп:
npm run dev
Codestyle
рдХреЛрдб рд╢реИрд▓реА рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо tslint рдФрд░ prettier рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд╕рд╛рде рд╣реА рдЗрд╕реЗ рдХрдорд┐рдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рд╛рдПрдВрдЧреЗред
Tslint, prettier, рдХрд░реНрдХрд╢ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
npm i tslint tslint-config-prettier prettier husky -D
рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ .prettierrc
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдХрд░ .prettierrc
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
{ "printWidth": 120, "trailingComma": "none", "singleQuote": true }
рдкреНрд░реАрдЯрд┐рдпрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВ
"prettier": "npx prettier --write src/* test/* example/*"
рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде tslint.json
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдХрд░ tslint рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
{ "extends": ["tslint:recommended", "tslint-config-prettier"], "rules": { "curly": false, "ordered-imports": false, "interface-name": [true, "never-prefix"] } }
Tslint рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдХреЛрдбрд╕реНрдЯрд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ:
"tslint": "tslint -p tslint -p tsconfig.json", "codestyle": "npm run prettier && npm run tslint"
рдЕрдм рдХрдорд┐рдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдбреЗрдХреНрд╕ рд░рди рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ package.json
рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
"husky": { "hooks": { "pre-commit": "npm run codestyle" } }
рдкреНрд░рд▓реЗрдЦрди
Md рд╕реЗ рд╡реЗрдм рдкреЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдбреЙрдХреНрд╕рд┐рдлрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдкреАрдЖрдИ tsdoc рд╕реЗ рдкреНрд░рд▓реЗрдЦрди рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ
рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
npm i docsify-cli typedoc -D
рдбреЙрдХреНрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, README.md
рдмрдирд╛рдПрдБ:
# Best lib ever Best lib ever `helloWorld` return `'hello world'` ## Example ``js const a = require('') console.log(a.helloWorld()) // prints 'Hello world!' ``
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдзрд┐рдХ рдЬреЛрдбрд╝реЗрдВ
рд╕реНрд░реЛрдд рдпрд╣рд╛рдБ рд╣реИ
рдЖрдЧреЗ рдХрд░рддреЗ рд╣реИрдВ
npx docsify init ./docs
рд╕рд╛рдЗрдбрдмрд╛рд░ рдореЗрдВ рд╕рд╛рдЗрдбрдмрд╛рд░ рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВред рд╕рд╛рдЗрдбрдмрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдирд╛рдХрд░
# Best lib ever * [Best lib ever](/) * [More examples](/moreExamples)
рдЕрдм, рдпрд╣ рд╕рдм рд╕реБрдВрджрд░рддрд╛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВ
"docsify": "docsify serve ./docs"
рдФрд░ рджреМрдбрд╝реЛ
npm run docsify
рдЕрдм рдПрдХ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐ рдкреНрд░рд▓реЗрдЦрди рд▓реЗрддреЗ рд╣реИрдВ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреЛрдб рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝реЗрдВ:
ред .gitinore
рдореЗрдВ docs/api
рдЬреЛрдбрд╝реЗрдВ
рдЯрд╛рдЗрдкреНрдбреЛрдХ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВ
"typedoc": "typedoc --out ./docs/api ./src --mode file --readme docs/README.md"
рдЕрдВрдд рдореЗрдВ, рдЕрдВрддрд┐рдо рдбреЙрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВ
"docs": "npm run typedoc && npm run docsify"
рдбреЙрдХ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдм рд╕рдм рдХреБрдЫ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ
npm run docs
рдкрд░реАрдХреНрд╖рдг
рдЬреЗрд╕реНрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
npm install --save-dev @types/jest @types/node jest ts-jest typescript
рдЪрд▓реЛ jest.config.js
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ
module.exports = { roots: ['/src'], transform: { '^.+\\.tsx?$': 'ts-jest', }, testRegex: '(/__test__/.*|(\\.|/)(test|spec))\\.tsx?$', moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], }
рдПрдХ рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдПрдВ ( test/index.ts
):
import { helloWorld } from "../src"; test('Should return helloWorld', () => { expect(helloWorld()).toBe('Hello world!') })
рдФрд░ рдЕрдм рдЖрдк рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ
npm test
рд╣рдо рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг
рдЕрдм рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
npm run build
рдЕрдВрддрд┐рдо рдЧрд┐рддреБрдм рднрдВрдбрд╛рд░