원본 포스터 (@robsonrosa)와 비슷한 문제가 있습니다. 제 경우에는 dist
디렉토리로 컴파일되는 typecript를 사용합니다 . typescript를 루트 디렉터리로 컴파일 할 수 있지만 가장 좋은 해결책은 package.json
dist 디렉터리에 별도의 파일 을 생성하는 것 입니다.
이것은 복사에 대한 @scvnc 제안과 유사 package.json
하지만 비틀기가 있습니다.
패키징 프로세스의 일부로 루트 디렉토리 package.json
의 기본 package.json
파일을 기반으로하지만 구별되는 패키지 용을 생성해야합니다.
근거:
- 루트
package.json
파일은 개발 파일입니다. 패키지 사용자에게 사용되지 않는 스크립트 또는 개발 종속성이 포함될 수 있지만 보안 문제가 발생할 수 있습니다. 포장 절차에는 제품에서 해당 정보를 제거하는 코드가 포함될 수 있습니다 package.json
.
- 다른 패키지 파일이 필요할 수있는 다른 환경에 패키지를 배포 할 수 있습니다 (예 : 다른 버전 또는 종속성을 가질 수 있음).
--- 편집하다 ---
댓글에서 해결책을 요청 받았습니다. 그래서 여기에 제가 사용하고있는 코드가 있습니다. 이것은 일반적인 것을 의미하지 않으며 내 프로젝트에 특정한 예로 간주되어야합니다.
내 설정 :
package.json - main package.json with dev dependencies and useful scripts.
.npmignore - files to ignore; copied to 'dist' directory as part of the setup.
/src - directory where my typescript code resides.
/src/SetupPackage.ts - bit of code used to setup the package.
/dist - destination directory for the compiled javascript files.
dist
디렉터리 만 패키징 하고 디렉터리는 패키지의 루트 디렉터리 여야합니다.
파일 SetupPackage.ts
내에서 src
디렉토리에 컴파일됩니다 SetupPackage.js
에 dist
타이프 라이터로 디렉토리 :
import fs from "fs";
// DO NOT DELETE THIS FILE
// This file is used by build system to build a clean npm package with the compiled js files in the root of the package.
// It will not be included in the npm package.
function main() {
const source = fs.readFileSync(__dirname + "/../package.json").toString('utf-8');
const sourceObj = JSON.parse(source);
sourceObj.scripts = {};
sourceObj.devDependencies = {};
if (sourceObj.main.startsWith("dist/")) {
sourceObj.main = sourceObj.main.slice(5);
}
fs.writeFileSync(__dirname + "/package.json", Buffer.from(JSON.stringify(sourceObj, null, 2), "utf-8") );
fs.writeFileSync(__dirname + "/version.txt", Buffer.from(sourceObj.version, "utf-8") );
fs.copyFileSync(__dirname + "/../.npmignore", __dirname + "/.npmignore");
}
main();
이 파일:
- 루트를 복사
package.json
하지만 패키지에 필요하지 않은 스크립트 및 개발 종속성을 제거합니다. 또한 패키지에 대한 기본 진입 점을 수정합니다.
- 에서 패키지 버전을
package.json
라는 파일에 씁니다 version.txt
.
.npmignore
루트 에서 패키지를 복사합니다 .
.npmignore 콘텐츠는 다음과 같습니다.
*.map
*.spec.*
SetupPackage.*
version.txt
즉 단위 테스트 (사양 파일) 및 typescript 맵 파일은 물론 생성 된 SetupPackage.js
파일과 파일도 무시됩니다 version.txt
. 이것은 깨끗한 패키지를 남깁니다.
마지막으로 주 package.json
파일에는 빌드 시스템에서 사용할 수있는 다음 스크립트가 있습니다 ( sh
셸로 사용되는 것으로 가정 ).
"scripts": {
"compile": "tsc",
"clean": "rm -rf dist",
"prebuildpackage": "npm run clean && npm run compile && node dist/SetupPackage.js",
"buildpackage": "cd dist && npm pack"
},
패키지를 빌드하기 위해 빌드 시스템은 리포지토리를 복제 npm install
한 다음 실행 npm run buildpackage
합니다.
dist
깨끗한 컴파일을 보장하는 디렉토리를 삭제합니다 .
- typescript 코드를 javascript로 컴파일합니다.
- 패키징
SetupPackage.js
을 준비 하는 파일을 실행합니다 dist
.
- 받는 CD의
dist
디렉토리와 패키지를 빌드있다.
version.txt
package.json에서 버전을 가져오고 내 저장소에 태그를 지정하는 쉬운 방법으로 파일을 사용합니다 . 이를 수행하는 수많은 다른 방법이 있거나 버전을 자동으로 증가시킬 수 있습니다. 에서이를 제거 SetupPackage.ts
하고 .npmignore
당신에게 도움이되지 않습니다.