최신 npm 패키지를 만드는 방법
14912 단어 webdevbeginnersjavascript
이제 npm 패키지를 우아하게 초기화하는 방법에 대해 오늘 제 작업을 보여드리겠습니다.
설정
처음에는 만들기
package.json
pnpm init
pnpm은 필요한 정보를 자동으로 생성합니다.
그런 다음 몇 가지 코드를 추가합니다.
// src/math.js
export const increment = value => ++value;
// src/index.js
import {increment} from "./math";
export default increment(0);
이제 간단한 ESM 패키지가 생겼습니다. npm 패키지의 플래그로 내보내는 항목을 지정해야 합니다. 그래서 다음 줄을
package.json
에 추가합니다."exports": {
"import": "./src/index.js",
}
번들러
앞에서 언급했듯이 패키지에 ESM 또는 CJS 지원만 제공하는 것으로는 충분하지 않지만 동일한 작업을 수행하는 두 세트의 코드를 손으로 작성하고 싶지 않으므로 TypeScript를 다음으로 변환할 수 있는 번들러가 필요합니다. ESM과 CJS는 vite도 선택하기 때문에 esbuild을 선택합니다.
설치가 쉽습니다:
pnpm install esbuild -D
Esbuild에는 매우 사용하기 쉬운 CLI가 있습니다.
package.json
에 몇 가지 패키지 스크립트를 추가하기만 하면 됩니다."scripts": {
"build": "npm run build:esm && npm run build:cjs",
"build:esm": "esbuild --bundle src/index.js --format=esm --outfile=dist/esm.js",
"build:cjs": "esbuild --bundle src/index.js --format=cjs --outfile=dist/cjs.js",
}
pnpm run build
를 실행하면 dist 폴더에서 esm.js
및 cjs.js
를 볼 수 있으므로 package.json
를 변경할 수 있습니다."exports": {
"import": "./dist/esm.js",
"require": "./dist/cjs.js"
}
Esbuild는 기본적으로 TypeScript를 지원하므로 TypeScript를 구성할 필요가 없으며
.js
파일의 이름을 .ts
로 바꾸고 패키지 스크립트를 변경하기만 하면 됩니다."scripts": {
"build": "npm run build:esm && npm run build:cjs",
"build:esm": "esbuild --bundle src/index.ts --format=esm --outfile=dist/esm.js",
"build:cjs": "esbuild --bundle src/index.ts --format=cjs --outfile=dist/cjs.js",
}
유형
패키지에 유형 정의를 추가하면 패키지를 더 쉽게 사용할 수 있지만 esbuild에는 유형 정의에 대한 기본 제공 지원이 없지만 플러그인을 통해 구현할 수 있습니다.
pnpm add esbuild-plugin-d.ts -D
Esbuild cli는 플러그인 사용을 지원하지 않으므로 esbuild의 JavaScript API를 사용하여 패키지를 빌드해야 합니다.
생성
build.js
:// build.js
const esbuild = require("esbuild");
const { dtsPlugin } = require("esbuild-plugin-d.ts");
const option = {
bundle: true,
color: true,
logLevel: "info",
sourcemap: true,
entryPoints: ["./src/index.ts"],
minify: true,
}
async function run() {
await esbuild
.build({
format: "esm",
outdir: "dist",
splitting: true,
plugins: [dtsPlugin()],
...option
})
.catch(() => process.exit(1))
await esbuild
.build({
format: "cjs",
outfile: "./dist/cjs.js",
...option
})
.catch(() => process.exit(1))
}
run()
그런 다음 편집
package.json
"scripts": {
"build": "node build",
},
pnpm run build
를 다시 실행하면 index.d.ts
가 성공적으로 생성되었음을 확인할 수 있습니다.이제 d.ts의 위치를 package.json에 추가하면 유형 정의가 완료됩니다.
"types": "./dist/index.d.ts"
이제 완전한 기능을 갖춘 프로젝트가 있고 간단한 패키지를 빌드하는 데 충분하지만 큰 패키지의 경우 단위 테스트와 린트가 필요합니다.
단위 테스트
단위 테스트 라이브러리로 jest을 선택했는데 강력하고 사용하기 쉽습니다.
몇 가지 dev 종속성을 설치해야 합니다.
pnpm add -D @jest/global jest ts-jest typescript
그런 다음
jest.config.js
를 만듭니다.// jest.config.js
module.exports = {
preset: 'ts-jest',
transform: {
'^.+\\.ts?$': 'ts-jest',
},
};
Jest가 준비되었습니다. 단위 테스트를 작성해 보겠습니다.
import {increment} from "../src/math";
import {describe, expect, test} from "@jest/globals";
describe("math module", () => {
test("0 increment equal 1", () => {
expect(increment(0)).toBe(1);
});
});
패키지 스크립트를 추가합니다.
"scripts": {
"test": "jest"
},
pnpm test
를 실행하여 jest를 시작합니다.린트
eslint을 사용할 수밖에 없는 것 같습니다.
pnpm create @eslint/config
기능을 수동으로 선택한 다음
package.json
에 스크립트를 추가합니다."scripts": {
"lint": "eslint --ext .js,.jsx,.ts,.tsx --fix -c .eslintrc.js",
},
마침내
축하합니다. npm 패키지를 우아하게 초기화하는 방법을 배웠습니다. 의견이 있으면 어쨌든 삭제하십시오.
처음부터 빌드하지 않으려면 my template 를 사용하면 됩니다.
Reference
이 문제에 관하여(최신 npm 패키지를 만드는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/akarachen/how-to-make-a-modern-npm-package-5096텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)