{"_id":"@angangii/frontendpractice","_rev":"1-b12dd6372fb82b312a858a69a8258304","name":"@angangii/frontendpractice","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@angangii/frontendpractice","version":"1.0.0","description":"1. 临时安装可执行依赖包，不用全局安装，不用担心长期的污染。\r 2. 可以执行依赖包中的命令，安装完成自动运行。\r 3. 自动加载node_modules中依赖包，不用指定$PATH。\r 4. 可以指定node版本、命令的版本，解决了不同项目使用不同版本的命令的问题。","main":"dist/index.js","scripts":{"test":"jest","dev":"tsc --watch","build":"tsc","clean":"rmdir dist","lint":"eslint src __tests__ --ext .js,.ts --cache --fix","prepare":"husky install"},"keywords":[],"author":{"name":"felix"},"license":"ISC","types":"dist/types/index.d.ts","type":"module","publishConfig":{"access":"public"},"devDependencies":{"@commitlint/cli":"^17.1.2","@commitlint/config-conventional":"^17.1.0","@types/jest":"^29.0.3","@typescript-eslint/eslint-plugin":"^5.37.0","@typescript-eslint/parser":"^5.37.0","eslint":"^8.23.1","eslint-config-prettier":"^8.5.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.1","jest":"^29.0.3","prettier":"^2.7.1","ts-jest":"^29.0.1","ts-node":"^10.9.1","typescript":"^4.8.3"},"dependencies":{"JSONStream":"^1.3.5","acorn-jsx":"^5.3.2","acorn-walk":"^8.2.0","acorn":"^8.8.0","ajv":"^6.12.6","ansi-escapes":"^4.3.2","ansi-regex":"^5.0.1","ansi-styles":"^4.3.0","anymatch":"^3.1.2","arg":"^4.1.3","argparse":"^2.0.1","array-union":"^2.1.0","array-ify":"^1.0.0","babel-jest":"^29.0.3","arrify":"^1.0.1","babel-plugin-jest-hoist":"^29.0.2","babel-plugin-istanbul":"^6.1.1","babel-preset-current-node-syntax":"^1.0.1","babel-preset-jest":"^29.0.2","braces":"^3.0.2","balanced-match":"^1.0.2","browserslist":"^4.21.4","brace-expansion":"^1.1.11","bs-logger":"^0.2.6","callsites":"^3.1.0","buffer-from":"^1.1.2","bser":"^2.1.1","camelcase":"^5.3.1","camelcase-keys":"^6.2.2","caniuse-lite":"^1.0.30001402","chalk":"^4.1.2","ci-info":"^3.4.0","cjs-module-lexer":"^1.2.2","cliui":"^7.0.4","co":"^4.6.0","collect-v8-coverage":"^1.0.1","compare-func":"^2.0.0","color-name":"^1.1.4","concat-map":"^0.0.1","char-regex":"^1.0.2","color-convert":"^2.0.1","conventional-changelog-angular":"^5.0.13","conventional-changelog-conventionalcommits":"^5.0.0","convert-source-map":"^1.8.0","conventional-commits-parser":"^3.2.4","cosmiconfig":"^7.0.1","create-require":"^1.1.1","cross-spawn":"^7.0.3","dargs":"^7.0.0","debug":"^4.3.4","decamelize":"^1.2.0","decamelize-keys":"^1.1.0","dedent":"^0.7.0","deep-is":"^0.1.4","deepmerge":"^4.2.2","diff":"^4.0.2","diff-sequences":"^29.0.0","doctrine":"^3.0.0","detect-newline":"^3.1.0","dir-glob":"^3.0.1","dot-prop":"^5.3.0","emoji-regex":"^8.0.0","electron-to-chromium":"^1.4.253","emittery":"^0.10.2","error-ex":"^1.3.2","escalade":"^3.1.1","escape-string-regexp":"^4.0.0","eslint-utils":"^3.0.0","eslint-visitor-keys":"^3.3.0","espree":"^9.4.0","esquery":"^1.4.0","esrecurse":"^4.3.0","esprima":"^4.0.1","eslint-scope":"^7.1.1","estraverse":"^5.3.0","exit":"^0.1.2","execa":"^5.1.1","esutils":"^2.0.3","expect":"^29.0.3","fast-deep-equal":"^3.1.3","fast-json-stable-stringify":"^2.1.0","fast-glob":"^3.2.12","fast-levenshtein":"^2.0.6","fast-diff":"^1.2.0","fb-watchman":"^2.0.1","fastq":"^1.13.0","file-entry-cache":"^6.0.1","find-up":"^5.0.0","fill-range":"^7.0.1","flatted":"^3.2.7","flat-cache":"^3.0.4","fs-extra":"^10.1.0","fs.realpath":"^1.0.0","function-bind":"^1.1.1","gensync":"^1.0.0-beta.2","functional-red-black-tree":"^1.0.1","get-caller-file":"^2.0.5","git-raw-commits":"^2.0.11","get-package-type":"^0.1.0","global-dirs":"^0.1.1","glob":"^7.2.3","glob-parent":"^6.0.2","globby":"^11.1.0","globals":"^13.17.0","graceful-fs":"^4.2.10","grapheme-splitter":"^1.0.4","get-stream":"^6.0.1","has":"^1.0.3","hard-rejection":"^2.1.0","has-flag":"^4.0.0","hosted-git-info":"^4.1.0","html-escaper":"^2.0.2","ignore":"^5.2.0","import-local":"^3.1.0","indent-string":"^4.0.0","imurmurhash":"^0.1.4","ini":"^1.3.8","inflight":"^1.0.6","inherits":"^2.0.4","is-core-module":"^2.10.0","is-arrayish":"^0.2.1","is-extglob":"^2.1.1","import-fresh":"^3.3.0","human-signals":"^2.1.0","is-glob":"^4.0.3","is-obj":"^2.0.0","is-generator-fn":"^2.1.0","is-number":"^7.0.0","is-plain-obj":"^1.1.0","istanbul-lib-coverage":"^3.2.0","is-fullwidth-code-point":"^3.0.0","is-text-path":"^1.0.1","is-stream":"^2.0.1","isexe":"^2.0.0","istanbul-lib-instrument":"^5.2.0","istanbul-lib-report":"^3.0.0","istanbul-lib-source-maps":"^4.0.1","jest-circus":"^29.0.3","istanbul-reports":"^3.1.5","jest-cli":"^29.0.3","jest-diff":"^29.0.3","jest-config":"^29.0.3","jest-docblock":"^29.0.0","jest-environment-node":"^29.0.3","jest-each":"^29.0.3","jest-get-type":"^29.0.0","jest-matcher-utils":"^29.0.3","jest-mock":"^29.0.3","jest-changed-files":"^29.0.0","jest-haste-map":"^29.0.3","jest-message-util":"^29.0.3","jest-pnp-resolver":"^1.2.2","jest-regex-util":"^29.0.0","jest-resolve":"^29.0.3","jest-resolve-dependencies":"^29.0.3","jest-runner":"^29.0.3","jest-runtime":"^29.0.3","jest-util":"^29.0.3","jest-leak-detector":"^29.0.3","jest-snapshot":"^29.0.3","jest-validate":"^29.0.3","jest-worker":"^29.0.3","jest-watcher":"^29.0.3","js-sdsl":"^4.1.4","jsesc":"^2.5.2","js-tokens":"^4.0.0","js-yaml":"^4.1.0","json-schema-traverse":"^0.4.1","json-parse-even-better-errors":"^2.3.1","json-stable-stringify-without-jsonify":"^1.0.1","json5":"^2.2.1","jsonparse":"^1.3.1","jsonfile":"^6.1.0","kind-of":"^6.0.3","kleur":"^3.0.3","leven":"^3.1.0","locate-path":"^6.0.0","levn":"^0.4.1","lines-and-columns":"^1.2.4","lodash":"^4.17.21","lodash.memoize":"^4.1.2","lru-cache":"^6.0.0","make-error":"^1.3.6","make-dir":"^3.1.0","lodash.merge":"^4.6.2","map-obj":"^4.3.0","meow":"^8.1.2","makeerror":"^1.0.12","merge2":"^1.4.1","micromatch":"^4.0.5","merge-stream":"^2.0.0","mimic-fn":"^2.1.0","minimatch":"^3.1.2","min-indent":"^1.0.1","minimist":"^1.2.6","minimist-options":"^4.1.0","ms":"^2.1.2","node-releases":"^2.0.6","normalize-package-data":"^3.0.3","node-int64":"^0.4.0","natural-compare":"^1.4.0","normalize-path":"^3.0.0","once":"^1.4.0","npm-run-path":"^4.0.1","optionator":"^0.9.1","p-limit":"^3.1.0","p-try":"^2.2.0","p-locate":"^5.0.0","parent-module":"^1.0.1","parse-json":"^5.2.0","onetime":"^5.1.2","path-key":"^3.1.1","path-exists":"^4.0.0","path-is-absolute":"^1.0.1","picocolors":"^1.0.0","picomatch":"^2.3.1","path-type":"^4.0.0","path-parse":"^1.0.7","pkg-dir":"^4.2.0","pirates":"^4.0.5","pretty-format":"^29.0.3","prelude-ls":"^1.2.1","prettier-linter-helpers":"^1.0.0","punycode":"^2.1.1","queue-microtask":"^1.2.3","quick-lru":"^4.0.1","react-is":"^18.2.0","read-pkg":"^5.2.0","read-pkg-up":"^7.0.1","redent":"^3.0.0","regexpp":"^3.2.0","require-directory":"^2.1.1","require-from-string":"^2.0.2","prompts":"^2.4.2","resolve":"^1.22.1","q":"^1.5.1","resolve-from":"^4.0.0","resolve-cwd":"^3.0.0","readable-stream":"^3.6.0","reusify":"^1.0.4","resolve.exports":"^1.1.0","resolve-global":"^1.0.0","run-parallel":"^1.2.0","rimraf":"^3.0.2","semver":"^7.3.7","shebang-command":"^2.0.0","slash":"^3.0.0","sisteransi":"^1.0.5","shebang-regex":"^3.0.0","safe-buffer":"^5.2.1","signal-exit":"^3.0.7","spdx-correct":"^3.1.1","source-map-support":"^0.5.13","source-map":"^0.6.1","spdx-exceptions":"^2.3.0","spdx-expression-parse":"^3.0.1","spdx-license-ids":"^3.0.12","sprintf-js":"^1.0.3","split2":"^3.2.2","stack-utils":"^2.0.5","string-length":"^4.0.2","strip-bom":"^4.0.0","strip-ansi":"^6.0.1","string-width":"^4.2.3","string_decoder":"^1.3.0","strip-final-newline":"^2.0.0","strip-json-comments":"^3.1.1","strip-indent":"^3.0.0","supports-color":"^7.2.0","supports-hyperlinks":"^2.3.0","supports-preserve-symlinks-flag":"^1.0.0","terminal-link":"^2.1.1","text-extensions":"^1.9.0","test-exclude":"^6.0.0","through":"^2.3.8","text-table":"^0.2.0","tmpl":"^1.0.5","through2":"^4.0.2","to-regex-range":"^5.0.1","to-fast-properties":"^2.0.0","tslib":"^1.14.1","tsutils":"^3.21.0","type-check":"^0.4.0","trim-newlines":"^3.0.1","type-fest":"^0.20.2","universalify":"^2.0.0","uri-js":"^4.4.1","update-browserslist-db":"^1.0.9","util-deprecate":"^1.0.2","type-detect":"^4.0.8","v8-to-istanbul":"^9.0.1","v8-compile-cache-lib":"^3.0.1","validate-npm-package-license":"^3.0.4","which":"^2.0.2","word-wrap":"^1.2.3","wrap-ansi":"^7.0.0","wrappy":"^1.0.2","write-file-atomic":"^4.0.2","y18n":"^5.0.8","yallist":"^4.0.0","walker":"^1.0.8","yaml":"^1.10.2","yargs-parser":"^20.2.9","yargs":"^17.5.1","yn":"^3.1.1","yocto-queue":"^0.1.0"},"repository":{"type":"git","url":"git+https://github.com/angangi/FrontendPractice.git"},"bugs":{"url":"https://github.com/angangi/FrontendPractice/issues"},"homepage":"https://github.com/angangi/FrontendPractice#readme","gitHead":"a62115efc8e84ad9f7c3e3f8f534e49fe1bf685d","_id":"@angangii/frontendpractice@1.0.0","_nodeVersion":"16.14.2","_npmVersion":"8.5.0","dist":{"integrity":"sha512-4EIiTk+pagZhG5SAE025kVZZOO4cDOZC8uDfVU24IiMFPW0/aZNLpt/LL2lEqeaxVfNl6cgcAD68xsQS+oWGKw==","shasum":"3a1247db6a127ffcc05f6368781995bfaa85fd20","tarball":"https://registry.npmjs.org/@angangii/frontendpractice/-/frontendpractice-1.0.0.tgz","fileCount":30,"unpackedSize":81631,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFWJSETvkNb9+4i9nsT5J3tQ9RayRaWILzASJoWCfWEFAiAsAhbXFblBI1/GG72Z1Id1a6QegT2MYZ4xiPzonwRuVg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjJC3zACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqgpA//UeidQLbKHHcQNnb+VsfeLNWRWHXdArn3lzr09dMgGy0+u7dK\r\nRGVQ+IxpU2/AkasFqkfr6LdaIMtHttQQ5N1MmgIrcBwT2srniLLa78ojJ8B9\r\nztSgyG03lNN4+H90aXrV6F8gSTUWJHpBtp1C+vjFZQDYKTOKt+HNT9yPCK58\r\nQj6+f+/sW6JGQ92lKwaVQcv/k0PiEqdHOnLVdr7xg8Z8OtD8ops83za2Vuq1\r\nCubLqK9Tc6tVN0FBpm9D1ueW5DlAKSrbGennkejBBX8KrRK5gI9pyQRyIC9/\r\ntNmFpIvKtPhuZumbhyn/YwOxymZsqsrqb7aBDw1YVlnSmpRZzHbnNNvCP6Ns\r\nrt9ZyRiewORGgXEYMgntJLLHb01KZ+t8/b8U9RnCOhVo6nLro1h/vAui8qip\r\nVevRJfdPrSOUmMAsV1wGcMPWgQHPlCJGtrXJ1au6UzYkFwPBz85lbo9XytrK\r\n4bByjezIdbGlwKTnxF4rpdm+7dehGy7+vEiZ5dMAjQ+rODghL5H3WY/3iTh6\r\nIuFN6hHQSJYW0oiPPqV4TJCOLvW4OJpOVqnhQ9YunTs2laodPKprh5yq3ykM\r\nWzMx3JfEaeY+qVLIPwgJuqKP0ldeLyBguUgX75N+PJ90RvZbzBlwqnHXaAub\r\nVjrzRypYe2/hzKBf/qLmaU4rI4G+bqpdJy4=\r\n=CVHU\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"angangi","email":"angangi@outlook.com"},"directories":{},"maintainers":[{"name":"angangi","email":"angangi@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/frontendpractice_1.0.0_1663315442853_0.20145772597794998"},"_hasShrinkwrap":false},"1.1.0":{"name":"@angangii/frontendpractice","version":"1.1.0","description":"1. 临时安装可执行依赖包，不用全局安装，不用担心长期的污染。\r 2. 可以执行依赖包中的命令，安装完成自动运行。\r 3. 自动加载node_modules中依赖包，不用指定$PATH。\r 4. 可以指定node版本、命令的版本，解决了不同项目使用不同版本的命令的问题。","main":"dist/index.js","scripts":{"test":"jest","dev":"tsc --watch","build":"tsc","clean":"rmdir dist","lint":"eslint src __tests__ --ext .js,.ts --cache --fix","prepare":"husky install"},"keywords":[],"author":{"name":"felix"},"license":"ISC","types":"dist/types/index.d.ts","type":"module","publishConfig":{"access":"public"},"devDependencies":{"@commitlint/cli":"^17.1.2","@commitlint/config-conventional":"^17.1.0","@semantic-release/changelog":"^6.0.1","@semantic-release/git":"^10.0.1","@types/jest":"^29.0.3","@typescript-eslint/eslint-plugin":"^5.37.0","@typescript-eslint/parser":"^5.37.0","eslint":"^8.23.1","eslint-config-prettier":"^8.5.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.1","jest":"^29.0.3","prettier":"^2.7.1","semantic-release":"^19.0.5","ts-jest":"^29.0.1","ts-node":"^10.9.1","typescript":"^4.8.3"},"dependencies":{"acorn":"^8.8.0","acorn-jsx":"^5.3.2","acorn-walk":"^8.2.0","ajv":"^6.12.6","ansi-escapes":"^4.3.2","ansi-regex":"^5.0.1","ansi-styles":"^4.3.0","anymatch":"^3.1.2","arg":"^4.1.3","argparse":"^2.0.1","array-ify":"^1.0.0","array-union":"^2.1.0","arrify":"^1.0.1","babel-jest":"^29.0.3","babel-plugin-istanbul":"^6.1.1","babel-plugin-jest-hoist":"^29.0.2","babel-preset-current-node-syntax":"^1.0.1","babel-preset-jest":"^29.0.2","balanced-match":"^1.0.2","brace-expansion":"^1.1.11","braces":"^3.0.2","browserslist":"^4.21.4","bs-logger":"^0.2.6","bser":"^2.1.1","buffer-from":"^1.1.2","callsites":"^3.1.0","camelcase":"^5.3.1","camelcase-keys":"^6.2.2","caniuse-lite":"^1.0.30001402","chalk":"^4.1.2","char-regex":"^1.0.2","ci-info":"^3.4.0","cjs-module-lexer":"^1.2.2","cliui":"^7.0.4","co":"^4.6.0","collect-v8-coverage":"^1.0.1","color-convert":"^2.0.1","color-name":"^1.1.4","compare-func":"^2.0.0","concat-map":"^0.0.1","conventional-changelog-angular":"^5.0.13","conventional-changelog-conventionalcommits":"^5.0.0","conventional-commits-parser":"^3.2.4","convert-source-map":"^1.8.0","cosmiconfig":"^7.0.1","create-require":"^1.1.1","cross-spawn":"^7.0.3","dargs":"^7.0.0","debug":"^4.3.4","decamelize":"^1.2.0","decamelize-keys":"^1.1.0","dedent":"^0.7.0","deep-is":"^0.1.4","deepmerge":"^4.2.2","detect-newline":"^3.1.0","diff":"^4.0.2","diff-sequences":"^29.0.0","dir-glob":"^3.0.1","doctrine":"^3.0.0","dot-prop":"^5.3.0","electron-to-chromium":"^1.4.253","emittery":"^0.10.2","emoji-regex":"^8.0.0","error-ex":"^1.3.2","escalade":"^3.1.1","escape-string-regexp":"^4.0.0","eslint-scope":"^7.1.1","eslint-utils":"^3.0.0","eslint-visitor-keys":"^3.3.0","espree":"^9.4.0","esprima":"^4.0.1","esquery":"^1.4.0","esrecurse":"^4.3.0","estraverse":"^5.3.0","esutils":"^2.0.3","execa":"^5.1.1","exit":"^0.1.2","expect":"^29.0.3","fast-deep-equal":"^3.1.3","fast-diff":"^1.2.0","fast-glob":"^3.2.12","fast-json-stable-stringify":"^2.1.0","fast-levenshtein":"^2.0.6","fastq":"^1.13.0","fb-watchman":"^2.0.1","file-entry-cache":"^6.0.1","fill-range":"^7.0.1","find-up":"^5.0.0","flat-cache":"^3.0.4","flatted":"^3.2.7","fs-extra":"^10.1.0","fs.realpath":"^1.0.0","function-bind":"^1.1.1","functional-red-black-tree":"^1.0.1","gensync":"^1.0.0-beta.2","get-caller-file":"^2.0.5","get-package-type":"^0.1.0","get-stream":"^6.0.1","git-raw-commits":"^2.0.11","glob":"^7.2.3","glob-parent":"^6.0.2","global-dirs":"^0.1.1","globals":"^13.17.0","globby":"^11.1.0","graceful-fs":"^4.2.10","grapheme-splitter":"^1.0.4","hard-rejection":"^2.1.0","has":"^1.0.3","has-flag":"^4.0.0","hosted-git-info":"^4.1.0","html-escaper":"^2.0.2","human-signals":"^2.1.0","ignore":"^5.2.0","import-fresh":"^3.3.0","import-local":"^3.1.0","imurmurhash":"^0.1.4","indent-string":"^4.0.0","inflight":"^1.0.6","inherits":"^2.0.4","ini":"^1.3.8","is-arrayish":"^0.2.1","is-core-module":"^2.10.0","is-extglob":"^2.1.1","is-fullwidth-code-point":"^3.0.0","is-generator-fn":"^2.1.0","is-glob":"^4.0.3","is-number":"^7.0.0","is-obj":"^2.0.0","is-plain-obj":"^1.1.0","is-stream":"^2.0.1","is-text-path":"^1.0.1","isexe":"^2.0.0","istanbul-lib-coverage":"^3.2.0","istanbul-lib-instrument":"^5.2.0","istanbul-lib-report":"^3.0.0","istanbul-lib-source-maps":"^4.0.1","istanbul-reports":"^3.1.5","jest-changed-files":"^29.0.0","jest-circus":"^29.0.3","jest-cli":"^29.0.3","jest-config":"^29.0.3","jest-diff":"^29.0.3","jest-docblock":"^29.0.0","jest-each":"^29.0.3","jest-environment-node":"^29.0.3","jest-get-type":"^29.0.0","jest-haste-map":"^29.0.3","jest-leak-detector":"^29.0.3","jest-matcher-utils":"^29.0.3","jest-message-util":"^29.0.3","jest-mock":"^29.0.3","jest-pnp-resolver":"^1.2.2","jest-regex-util":"^29.0.0","jest-resolve":"^29.0.3","jest-resolve-dependencies":"^29.0.3","jest-runner":"^29.0.3","jest-runtime":"^29.0.3","jest-snapshot":"^29.0.3","jest-util":"^29.0.3","jest-validate":"^29.0.3","jest-watcher":"^29.0.3","jest-worker":"^29.0.3","js-sdsl":"^4.1.4","js-tokens":"^4.0.0","js-yaml":"^4.1.0","jsesc":"^2.5.2","json-parse-even-better-errors":"^2.3.1","json-schema-traverse":"^0.4.1","json-stable-stringify-without-jsonify":"^1.0.1","json5":"^2.2.1","jsonfile":"^6.1.0","jsonparse":"^1.3.1","JSONStream":"^1.3.5","kind-of":"^6.0.3","kleur":"^3.0.3","leven":"^3.1.0","levn":"^0.4.1","lines-and-columns":"^1.2.4","locate-path":"^6.0.0","lodash":"^4.17.21","lodash.memoize":"^4.1.2","lodash.merge":"^4.6.2","lru-cache":"^6.0.0","make-dir":"^3.1.0","make-error":"^1.3.6","makeerror":"^1.0.12","map-obj":"^4.3.0","meow":"^8.1.2","merge-stream":"^2.0.0","merge2":"^1.4.1","micromatch":"^4.0.5","mimic-fn":"^2.1.0","min-indent":"^1.0.1","minimatch":"^3.1.2","minimist":"^1.2.6","minimist-options":"^4.1.0","ms":"^2.1.2","natural-compare":"^1.4.0","node-int64":"^0.4.0","node-releases":"^2.0.6","normalize-package-data":"^3.0.3","normalize-path":"^3.0.0","npm-run-path":"^4.0.1","once":"^1.4.0","onetime":"^5.1.2","optionator":"^0.9.1","p-limit":"^3.1.0","p-locate":"^5.0.0","p-try":"^2.2.0","parent-module":"^1.0.1","parse-json":"^5.2.0","path-exists":"^4.0.0","path-is-absolute":"^1.0.1","path-key":"^3.1.1","path-parse":"^1.0.7","path-type":"^4.0.0","picocolors":"^1.0.0","picomatch":"^2.3.1","pirates":"^4.0.5","pkg-dir":"^4.2.0","prelude-ls":"^1.2.1","prettier-linter-helpers":"^1.0.0","pretty-format":"^29.0.3","prompts":"^2.4.2","punycode":"^2.1.1","q":"^1.5.1","queue-microtask":"^1.2.3","quick-lru":"^4.0.1","react-is":"^18.2.0","read-pkg":"^5.2.0","read-pkg-up":"^7.0.1","readable-stream":"^3.6.0","redent":"^3.0.0","regexpp":"^3.2.0","require-directory":"^2.1.1","require-from-string":"^2.0.2","resolve":"^1.22.1","resolve-cwd":"^3.0.0","resolve-from":"^4.0.0","resolve-global":"^1.0.0","resolve.exports":"^1.1.0","reusify":"^1.0.4","rimraf":"^3.0.2","run-parallel":"^1.2.0","safe-buffer":"^5.2.1","semver":"^7.3.7","shebang-command":"^2.0.0","shebang-regex":"^3.0.0","signal-exit":"^3.0.7","sisteransi":"^1.0.5","slash":"^3.0.0","source-map":"^0.6.1","source-map-support":"^0.5.13","spdx-correct":"^3.1.1","spdx-exceptions":"^2.3.0","spdx-expression-parse":"^3.0.1","spdx-license-ids":"^3.0.12","split2":"^3.2.2","sprintf-js":"^1.0.3","stack-utils":"^2.0.5","string_decoder":"^1.3.0","string-length":"^4.0.2","string-width":"^4.2.3","strip-ansi":"^6.0.1","strip-bom":"^4.0.0","strip-final-newline":"^2.0.0","strip-indent":"^3.0.0","strip-json-comments":"^3.1.1","supports-color":"^7.2.0","supports-hyperlinks":"^2.3.0","supports-preserve-symlinks-flag":"^1.0.0","terminal-link":"^2.1.1","test-exclude":"^6.0.0","text-extensions":"^1.9.0","text-table":"^0.2.0","through":"^2.3.8","through2":"^4.0.2","tmpl":"^1.0.5","to-fast-properties":"^2.0.0","to-regex-range":"^5.0.1","trim-newlines":"^3.0.1","tslib":"^1.14.1","tsutils":"^3.21.0","type-check":"^0.4.0","type-detect":"^4.0.8","type-fest":"^0.20.2","universalify":"^2.0.0","update-browserslist-db":"^1.0.9","uri-js":"^4.4.1","util-deprecate":"^1.0.2","v8-compile-cache-lib":"^3.0.1","v8-to-istanbul":"^9.0.1","validate-npm-package-license":"^3.0.4","walker":"^1.0.8","which":"^2.0.2","word-wrap":"^1.2.3","wrap-ansi":"^7.0.0","wrappy":"^1.0.2","write-file-atomic":"^4.0.2","y18n":"^5.0.8","yallist":"^4.0.0","yaml":"^1.10.2","yargs":"^17.5.1","yargs-parser":"^20.2.9","yn":"^3.1.1","yocto-queue":"^0.1.0"},"repository":{"type":"git","url":"git+https://github.com/angangi/FrontendPractice.git"},"bugs":{"url":"https://github.com/angangi/FrontendPractice/issues"},"homepage":"https://github.com/angangi/FrontendPractice#readme","gitHead":"1a05eaf6e7d77e45a6674d36de222104d9252eba","_id":"@angangii/frontendpractice@1.1.0","_nodeVersion":"16.17.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-s8cZ4rVOIl83SIAbYjrSWMnLe/dF9kackGmgXaGlJuV64AMQnNuc8ocNG5SOxpfHlDKDO6cru5LTbK4FdvDZBQ==","shasum":"135a48d07e3b4ac42c98a3bfbab0816325984697","tarball":"https://registry.npmjs.org/@angangii/frontendpractice/-/frontendpractice-1.1.0.tgz","fileCount":32,"unpackedSize":82914,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB+lA+ewymgmtQLO8xm5E1hPDOx4ne8/PzYfG3/Sdn6mAiEA32bFN6ageBm5KzHfANYMNb7/VMewq54DlEETmCtYz58="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjJEAVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqZeA/9GzPfkziILt+nYWMZEd3dZ8HX07dldRUsfSJZ3cNTwJtK/Cka\r\nmbpbl32nk22yWfXHRRnUJTv2NQFvHkymdYOJISGOKUYPbH1ouH6T4oFDgy9A\r\n4ehw7ke4F3JnTpg/iKtmcGlDNGz/wT+9CcLnOR2v6bFrwfIwLnL/O2mgra6p\r\ndfZnjvKBK3vCuCMuNXdmw+SzLc4LbehDvU4IVGdZjUOA/uee2u6CGrvpfwwi\r\nzPvIO0GOtaYZEkxTSsNc62robaiMrKO/QnbAOOJKp/HzxiZHS9mPihSHFck6\r\njUwlkoqiwk5Q9vvZavOpRzntPM/j2nvut3i3Aaup3BMH1TnKisWqeVYAjXy4\r\nZl6Jt26SVlnvuJ/ldO4G2/siUrBGjvo9JhZUQy0/xxn+RXuRqSanJtSc9T5C\r\nJFE8QZfz72ALD2vG+kXtvR5m4U03W7Fn90VicsfbI7wRMSAz0w7u6DG+PRiN\r\nnfsV2zI6w1b8TBJ+PUAOgt8eRePfZ3jRTEDhtu4OK4JiRkgWF4VuO1i/+GRF\r\ndse0tHCFzF/fYAF5CVTKzppl/i4D9gjf/UTsD24lQp9S6dJ9VL+b6G9Ez3VC\r\nB8Bm1MPschXd9T7nkj+0uop8jxVdZtjPmU/7+/6jRrRT0L8Dr+XRIJmKt2X9\r\nypYr/zdMWq4wKeTUb2VHxbjU8V/SC56qZU4=\r\n=qZn9\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"angangi","email":"angangi@outlook.com"},"directories":{},"maintainers":[{"name":"angangi","email":"angangi@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/frontendpractice_1.1.0_1663320085164_0.5169089620428649"},"_hasShrinkwrap":false}},"time":{"created":"2022-09-16T08:04:02.742Z","1.0.0":"2022-09-16T08:04:03.092Z","modified":"2022-09-16T09:21:25.437Z","1.1.0":"2022-09-16T09:21:25.326Z"},"maintainers":[{"name":"angangi","email":"angangi@outlook.com"}],"description":"1. 临时安装可执行依赖包，不用全局安装，不用担心长期的污染。\r 2. 可以执行依赖包中的命令，安装完成自动运行。\r 3. 自动加载node_modules中依赖包，不用指定$PATH。\r 4. 可以指定node版本、命令的版本，解决了不同项目使用不同版本的命令的问题。","homepage":"https://github.com/angangi/FrontendPractice#readme","keywords":[],"repository":{"type":"git","url":"git+https://github.com/angangi/FrontendPractice.git"},"author":{"name":"felix"},"bugs":{"url":"https://github.com/angangi/FrontendPractice/issues"},"license":"ISC","readme":"# 一些基础知识\n\n## npx用处\n1. 临时安装可执行依赖包，不用全局安装，不用担心长期的污染。\n2. 可以执行依赖包中的命令，安装完成自动运行。\n3. 自动加载node_modules中依赖包，不用指定$PATH。\n4. 可以指定node版本、命令的版本，解决了不同项目使用不同版本的命令的问题。\n\n## npm发布包\nhttps://blog.csdn.net/pet_ch/article/details/125281706\n\n# 初始化\n参考https://blog.csdn.net/qq_41581588/article/details/125920681\n\n1. 初始化：npm init -y，生成package.json文件，新建src目录，里面放一个index.ts文件\n2. 安装ts：npm i typescript -D，npx tsc --init\n3. 使用Prettier解决代码格式问题，使用linters解决代码质量问题：\n    - npm i eslint -D，npx eslint --init\n    - npm i prettier -D，echo {}> .prettierrc.json，npm i eslint-config-prettier eslint-plugin-prettier -D\n4. 因为一个项目通常是团队合作，我们不能保证每个人在提交代码之前执行一遍lint校验，所以需要git hooks 来自动化校验的过程，否则禁止提交。\n    - npm i husky -D，npx husky install\n    - 然后我们需要在每次执行npm install时自动启用husky，npm set-script prepare \"husky install\"\n    - 然后添加一个lint钩子：npx husky add .husky/pre-commit \"npm run lint\"\n5. 为什么需要 Commitlint，除了在后续的生成changelog文件和语义发版中需要提取commit中的信息，也利于其他同学分析你提交的代码，所以我们要约定commit的规范。@commitlint/cli Commitlint 命令行工具，@commitlint/config-conventional 基于 Angular 的约定规范\n    - npm i @commitlint/config-conventional @commitlint/cli -D\n    - npx husky add .husky/commit-msg 'npx --no-install commitlint --edit \"$1\"'\n    - 创建.commitlintrc，并写入配置\n6. 安装jest，和类型声明@types/jest，它执行需要ts-node和ts-jest\n    - npm i jest @types/jest ts-node ts-jest -D\n    - npx jest --init\n    - 为test添加eslint检查\n7. Github Actions，通过Github Actions实现代码合并或推送到主分支，dependabot机器人升级依赖等动作，会自动触发测试和发布版本等一系列流程。\n    - .github/workflows文件夹，然后在里面新建ci.yml文件和cd.yml文件(监听所有分支的push和pull_request动作，自动执行linter和tests任务)\n    - NPM网站上注册一个账号，获取TOKEN\n    - 把token填入项目的settings中，cd.yml中会引用它\n    - 然后安装语义发版依赖，需要用到semantic-release和它的插件：semantic-release：语义发版核心库，@semantic-release/changelog：用于自动生成 changelog.md，@semantic-release/git：用于将发布时产生的更改提交回远程仓库\n    - 在项目根目录新建配置文件.releaserc\n    - dependabot相关的配置\n\n## package.json\n- type.module：从Node v12.0.0开始，只要设置了 \"type\": \"module\", Node 会将整个项目视为ESM规范，我们就可以直接写裸写import/export。\n- publishConfig.access：当前项目发布到NPM的访问级别，它有 restricted和public两个选项,restricted表示我们发布到NPM上的是私有包（收费），访问级别默认为restricted,因为我们是开源项目所以标记为public。\n- devDependencies用于本地环境开发时候所需要的依赖包。\n- dependencies用户发布环境，生成上所需要的依赖包\n\n## package.lock.json\n\n记录项目依赖的版本号及依赖的依赖的版本号，前面的packages部分指明了版本号，后面的dependencies是为了兼容旧版本的npm（lockfileVersion=1的情况）\n\n## tsconfig.json\n```json\n{\n  \"compilerOptions\": {\n    /* Basic Options */\n    \"baseUrl\": \".\", // 模块解析根路径，默认为 tsconfig.json 位于的目录\n    \"rootDir\": \"src\", // 编译解析根路径，默认为 tsconfig.json 位于的目录\n    \"target\": \"ESNEXT\", // 指定输出 ECMAScript 版本，默认为 es5\n    \"module\": \"ESNext\", // 指定输出模块规范，默认为 Commonjs\n    \"lib\": [\"ESNext\", \"DOM\"], // 编译需要包含的 API，默认为 target 的默认值\n    \"outDir\": \"dist\", // 编译输出文件夹路径，默认为源文件同级目录\n    \"sourceMap\": true, // 启用 sourceMap，默认为 false\n    \"declaration\": true, // 生成 .d.ts 类型文件，默认为 false\n    \"declarationDir\": \"dist/types\", // .d.ts 类型文件的输出目录，默认为 outDir 目录\n    /* Strict Type-Checking Options */\n    \"strict\": true, // 启用所有严格的类型检查选项，默认为 true\n    \"esModuleInterop\": true, // 通过为导入内容创建命名空间，实现 CommonJS 和 ES 模块之间的互操作性，默认为 true\n    \"skipLibCheck\": true, // 跳过导入第三方 lib 声明文件的类型检查，默认为 true\n    \"forceConsistentCasingInFileNames\": true, // 强制在文件名中使用一致的大小写，默认为 true\n    \"moduleResolution\": \"Node\", // 指定使用哪种模块解析策略，默认为 Classic\n  },\n  \"include\": [\"src\"] // 指定需要编译文件，默认当前目录下除了 exclude 之外的所有.ts, .d.ts,.tsx 文件\n} \n```\n\n## .eslintrc.cjs\n我们将项目定义为ESM，eslint --init会自动识别type，并生成兼容的配置文件名称，如果我们改回.js结尾，再运行eslint将会报错。出现这个问题是eslint内部使用了require()语法读取配置。同样，这个问题也适用于其他功能的配置，比如后面会讲到的Prettier、Commitlint等，配置文件都不能以xx.js结尾，而要改为当前库支持的其他配置文件格式，如：.xxrc、.xxrc.json、.xxrc.yml\n\n## .prettierrc.json\n把 prettier 集成到 eslint 的校验中\n\n```json\n{\n  \"semi\": false, // 是否使用分号\n  \"singleQuote\": true, // 使用单引号代替双引号\n  \"trailingComma\": \"none\" // 多行时尽可能使用逗号结尾\n}\n```\n\n## .commitlintrc\n```json\n{\n  \"extends\": [\n    \"@commitlint/config-conventional\"\n  ]\n}\n```\n> Angular 规范说明：\n> feat：新功能\n> fix：修补 BUG\n> docs：修改文档，比如 README, CHANGELOG, CONTRIBUTE 等等\n> style：不改变代码逻辑 (仅仅修改了空格、格式缩进、逗号等等)\n> refactor：重构（既不修复错误也不添加功能）\n> perf：优化相关，比如提升性能、体验\n> test：增加测试，包括单元测试、集成测试等\n> build：构建系统或外部依赖项的更改\n> ci：自动化流程配置或脚本修改\n> chore：非 src 和 test 的修改，发布版本等\n> revert：恢复先前的提交\n\n## tsconfig.eslint.json\n扩展了tsconfig.json，解决了直接执行npm run lint将会报错，提示__tests__文件夹没有包含在tsconfig.json的include中，当我们添加到include之后，输出的dist中就会包含测试相关的文件的问题","readmeFilename":"README.md"}