배포 파일과 함께 npm 패키지를 게시하는 방법은 무엇입니까?


125

내 소스와 배포 파일이 포함 된 npm 패키지를 게시하고 싶습니다. 내 Github 저장소에는src JavaScript 소스 파일이 폴더가 있습니다. 빌드 프로세스 dist는 배포 파일이 포함 된 폴더를 생성 합니다. 물론 dist폴더는 Github 저장소에 체크인되지 않습니다.

누군가가했을 때 폴더 도 npm install가져 오는 방식으로 npm 패키지를 어떻게 게시 합니까? 현재 내가 달릴 때srcdistnpm publish git 저장소에서src 폴더 만 게시됩니다.

내 package.json은 다음과 같습니다.

{
  "name": "join-js",
  "version": "0.0.1",
  "homepage": "https://github.com/archfirst/joinjs",
  "repository": {
    "type": "git",
    "url": "https://github.com/archfirst/joinjs.git"
  },
  "main": "dist/index.js",
  "scripts": {
    "test": "gulp",
    "build": "gulp build",
    "prepublish": "npm run build"
  },
  "dependencies": {
    ...
  },
  "devDependencies": {
    ...
  }
}

답변:


102

package.json 파일 https://docs.npmjs.com/files/package.json#files 의 "files"필드를 살펴보십시오.

문서에서 :

"파일"필드는 프로젝트에 포함 할 파일의 배열입니다. 어레이의 폴더 이름을 지정하면 해당 폴더 내의 파일도 포함됩니다. (다른 규칙에 의해 무시되지 않는 한)


3
"파일"필드가 무시되는지 .gitignore또는 .npmignore(문서를 읽을 때 그렇지 않은 것 같음)-@Naresh가 어떤 방식으로 잘 작동하는지 알려주세요.
topheman

8
"파일"은 실제로 .gitignore를 무시합니다. .gitignore에 "dist"가 있지만 "files"에 포함되어 있고 폴더가 npm에 게시됩니다. "files"는 expess 및 bluebird와 같은 여러 인기 패키지가 게시하는 방식 인 것 같습니다 (.npmignore 메서드를 사용하는 다른 패키지도 있습니다). 지금은 "파일"을 사용하여 게시 할 내용을보다 직접적으로 말하는 것 같아 보겠습니다. 그러나 오늘 npm에 대한 지식을 적어도 두 번 늘려 주신 두 분께 감사드립니다!
Naresh

3
"파일"이 지정되면 있다는 지적이의 가치 에만 해당 파일 (등 package.json 같은 그렇지 않으면 .. --제외 될 파일 이외의) 프로젝트에 포함 된 유일한 사람이다
bmacnaughton

176

당신이 때 npm publish당신이하지 않은 경우, .npmignore파일을, NPM이 사용하는 .gitignore파일을 (귀하의 경우에는 제외 된 dist폴더).

문제를 해결하기 위해 만들어 .npmignore당신을 기반으로 파일 .gitignore, 파일을 dist 파일 폴더를 무시하지 않고 .

소스 : https://docs.npmjs.com/misc/developers#keeping-files-out-of-your-package


3
빠른 응답에 감사드립니다. 귀하의 답변은 확실히 정확하지만 지금은 유진이 제안한 "파일"접근 방식을 사용하겠습니다. 그의 답변 아래의 자세한 설명을 참조하십시오.
Naresh

3
정말 고맙습니다!
corvid

0

스크립트에서 데이터 파일을 사용하는 방법의 최소 예

또 다른 일반적인 사용 사례는 스크립트에서 사용해야하는 데이터 파일을 보유하는 것입니다.

이 작업은 다음에 언급 된 기술을 사용하여 쉽게 수행 할 수 있습니다 . node.JS 에서 로드 한 모듈의 경로를 어떻게 얻을 수 있습니까? require를 통해로드 한 모듈이 * 내가 아닙니다 * (즉 일부 node_module에서)

전체 예는 다음에서 찾을 수 있습니다.

이 설정으로, 파일 mydata.txt에 넣어 도착 node_modules/cirosantilli-data-files/mydata.txt우리는 우리에 추가하기 때문에 설치 후 files:의 항목 package.json.

myfunc그런 다음 함수 는 해당 파일을 찾고 require.resolve. ./cirosantilli-data-files물론 실행 파일에서만 작동합니다 .

package.json

{
  "bin": {
    "cirosantilli-data-files": "cirosantilli-data-files"
  },
  "license": "MIT",
  "files":  [
    "cirosantilli-data-files",
    "mydata.txt",
    "index.js"
  ],
  "name": "cirosantilli-data-files",
  "repository": "cirosantilli/linux-kernel-module-cheat",
  "version": "0.1.0"
}

mydata.txt

hello world

index.js

const fs = require('fs');
const path = require('path');

function myfunc() {
  const package_path = path.dirname(require.resolve(
    path.join('cirosantilli-data-files', 'package.json')));
  return fs.readFileSync(path.join(package_path, 'mydata.txt'), 'utf-8');
}
exports.myfunc = myfunc;

cirosantilli-data-files

#!/usr/bin/env node
const cirosantilli_data_files = require('cirosantilli-data-files');
console.log(cirosantilli_data_files.myfunc());

is-installed-globally패키지는 로컬 또는 글로벌 설치 여부에 따라 분산 파일에 대한 상대 경로를 생성하려는 경우 유용합니다. npm 패키지가 글로벌 또는 로컬로 설치되었는지 확인하는 방법

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.