Node.js 프로젝트를 위해 package.json 파일을 자동으로 빌드하는 방법이 있습니까


412

package.json을 수동으로 편집해야합니까? npm과 같은 프로그램은 파일을 살펴보고 "require"문을 참조한 다음이를 사용하여 package.json 파일에 필요한 항목을 넣을 수 없습니까? 그런 프로그램이 있습니까?


2
지금까지 파일을 직접 편집했습니다. 필요한 모든 패키지 (및 최소 버전)를 추가하십시오. 실행npm link
pkyeck

22
@neuromancer 당신은 동의하시기 바랍니다 수있는 권리 대답을? 38 개 이상의 투표권을 가진 사람입니다.
Esteban

2
npmjs.org/doc/install.html을 사용하면 새 패키지를 설치하는 동안 package.json을 자동으로 업데이트하는 데 사용할 수도 있습니다.
V31

1
@neromancer, 깁슨 책을 내려 놓고 고치세요! :)
prasanthv

1
npmjs.com/package/npm-collect은 정확히 이것과 더 많은 수행
coderofsalvation

답변:


601

package.json 파일은 npm 에서 node.js 프로젝트에 대해 학습 하는 데 사용됩니다 .

npm initpackage.json 파일을 생성하는 데 사용하십시오 !

npm과 함께 제공됩니다. https://docs.npmjs.com/cli/init에서 설명서를 읽으십시오.

또한이 파일을 프로그래밍 방식으로 생성하는 데 사용할 수있는 공식 도구가 있습니다 : https://github.com/npm/init-package-json


9
npm init내가 찾던 것이 바로 감사 였습니다! 또한 그 후 나는 보통 파일 npm shrinkwrap을 생성하기 위해 실행npm-shrinkwrap.json
Jasdeep Khalsa

75
Per npm init: npm install <pkg> --save나중에 패키지를 설치하고 package.json 파일에 종속성으로 저장하는 데 사용 합니다.
Brad Koch

5
npm initVisual Studio 2015의 패키지 관리자 콘솔에서 실행 한 후에 는 [...] Press ^C at any time to quit.아무것도 묻거나 json 파일을 만들지 않고 표시 및 중지됩니다. 뭔가 빠졌습니까?
Michael Hilus

2
npmjs.com/package/npm-collect를 사용하면 이미 설치된 모든 모듈을 수집 할 수 있습니다
coderofsalvation

3
npm init --force --yes이 파일을 생성 한 하나의 라이너
Bernhard Döbler

204

먼저 실행

npm init

... 프로젝트 / 패키지에 대해 몇 가지 질문을하고 ( 먼저 읽고 ) package.json 파일을 생성하십시오.

그런 다음 package.json 파일이 있으면

npm install <pkg> --save

또는

npm install <pkg> --save-dev

... 종속성을 설치하고 자동으로 추가 할 수 package.jsondependencies목록입니다.

(참고 : 종속성에 따라 버전 범위를 수동으로 조정해야 할 수도 있습니다.)


6
package.json을 만들지 않는 것 같습니다. win7x64 node0.10.9
13:51

33
나는 내 답변 전체를 가지고 있고, 줄을 구하고, 다시 쓰고 여전히 나에게 귀중한 것을 정말로 감사하지 않습니다. 구식인지 여부에 관계없이.
nzondlo

npm init에 대한 특정 문서는 여기에 있습니다
shmim

1
정답이어야합니다. 을 항상 수동으로 터치 할 필요는 없으며 package.json일반적으로 자동으로 처리됩니다.
Sallar

1
--save최신 npm 버전에서는 더 이상 필요하지 않습니다
David Callanan

180

방금 ./node_modules에서 종속성을 수집하는 간단한 스크립트를 작성했습니다. 그것은 현재 나의 요구 사항을 충족시킵니다. 이것은 다른 사람들에게 도움이 될 수 있습니다.

var fs = require("fs");

function main() {
  fs.readdir("./node_modules", function (err, dirs) {
    if (err) {
      console.log(err);
      return;
    }
    dirs.forEach(function(dir){
      if (dir.indexOf(".") !== 0) {
        var packageJsonFile = "./node_modules/" + dir + "/package.json";
        if (fs.existsSync(packageJsonFile)) {
          fs.readFile(packageJsonFile, function (err, data) {
            if (err) {
              console.log(err);
            }
            else {
              var json = JSON.parse(data);
              console.log('"'+json.name+'": "' + json.version + '",');
            }
          });
        }
      }
    });

  });
}

main();

제 경우에는 위의 스크립트가 출력됩니다.

"colors": "0.6.0-1",
"commander": "1.0.5",
"htmlparser": "1.7.6",
"optimist": "0.3.5",
"progress": "0.1.0",
"request": "2.11.4",
"soupselect": "0.2.0",   // Remember: remove the comma character in the last line.

이제 복사하여 붙여 넣을 수 있습니다. 즐기세요!


39
이것을 npm 모듈로 게시해야합니다
Ben

이제 770 줄을 되 찾으면 어떻게해야합니까? devDependencies를 포함하여 package.json에 58 개만 있습니다 :-/
Sherzod

3
내장 npm ls --depth=0은 거의
비슷하게

3
이것은 이것을 처리하는 올바른 방법이 아닙니다. 이것은 모든 모듈의 모든 의존성을 출력합니다. 그래서 패키지는 패키지를 필요로하는 경우 a, 패키지는 a패키지를 필요로 b하고 c모든 수준, 그래서이 스크립트가 출력을 a, b, c하지 올바른. 출력 만해야 a합니다. 하위 패키지는 자동으로 해결됩니다.
Sallar

나입니까, 아니면 대부분의 대답은 node_modules가 수동으로 복사되거나 작성된 기존 시스템에서 시작하지 않는다고 가정합니까? 개인 모듈이있는 프로젝트 폴더를 수령 할 때가 있으며 저장소에 액세스 할 수 없습니다. 내 저장소에 모듈을 넣은 후에도 프로젝트 재 작성을 자동화하고 싶습니다. 또는 '이 node_modules 폴더를 복사하십시오'라는 메시지가 나타납니다. 그렇습니다, 그렇습니다, 모범 사례, 그러나 나는 그들이하고있는 일을 모르는 개발자들의 현실을 다룹니다. 이를 통해 그러한 프로젝트를 정리할 수 있습니다. 공유해 주셔서 감사합니다!
noelhx

82

npm init

package.json 파일을 만든 다음

ls node_modules/ | xargs npm install --save

node_modules 폴더에있는 모듈을 채우십시오.

편집 : @paldepind는 npm init이제 node_modules / 폴더에있는 것을 자동으로 추가 하기 때문에 두 번째 명령이 중복된다고 지적했습니다 . 이것이 항상 사실인지는 모르지만 적어도 두 번째 명령없이 작동합니다.


5
설치 한 모든 모듈에 --save를 사용하지 않은 경우 매우 유용합니다.

7
npm init설치된 패키지를 기반으로 종속성을 자동으로 추가했으며 두 번째 명령을 실행할 필요가 없다는 것을 알았습니다.
paldepind

이런 식으로 node_modules 폴더 이름에 의존 할 수있어서 매우 기쁩니다 ... 휴!
DT Rush

또한 npm dedupe모듈을 사용할 때 모듈간에 공유되는 종속성을 가져 와서 node_modules디렉토리 의 최상위 레벨에 저장하는을 사용할 때 매우 유용 합니다 . 그러나 만지지 않습니다 package.json! 이를 통해 중복 제거 된 설정을 커밋하고 공유 할 수 있습니다.
병원체

1
사실 후에 package.json을 추가하는 모든 사람에게 훌륭한 답변입니다.
캐리 켄달

24

커맨드 라인 :

npm init

package.json 파일을 생성합니다

package.json 파일에 종속 패키지를 설치, 업데이트 및 설치 제거하려면 다음을 수행하십시오.

커맨드 라인 :

npm install <pkg>@* --save 

의존성에 따라 패키지의 최신 버전을 package.json 파일에 자동으로 추가합니다.

전의:

npm install node-markdown@* --save

커맨드 라인 :

npm install <pkg> --save

또한 종속성에 따라 패키지의 최신 버전을 package.json 파일에 자동으로 추가합니다.

패키지에 특정 버전이 필요한 경우 다음 명령 줄을 사용하십시오 .

npm install <pkg>@<version> --save

의존성에 따라 특정 버전의 패키지를 package.json 파일에 자동으로 추가합니다.

전의:

npm install koa-views@1.0.0 --save

패키지에 특정 버전의 버전이 필요한 경우 다음 명령 줄을 사용하십시오 .

npm install <pkg>@<version range>

종속성이있는 버전 범위 사이에서 패키지의 최신 버전을 package.json 파일에 자동으로 추가합니다.

전의:

npm install koa-views@">1.0.0 <1.2.0" --save

패키지 npm Doc의 버전을 작성하는 방법에 대한 자세한 내용

커맨드 라인 :

npm update --save

패키지를 package.json 파일로 업데이트하고 종속성이있는 모든 패키지의 업데이트 된 버전을 package.json 파일에 자동으로 추가합니다.

커맨드 라인 :

npm uninstall <pkg> --save

의존성에서 package.json 파일로 패키지를 자동으로 제거하고 node_module 폴더에서 패키지를 제거합니다.


14

실행 npm init -y하면 package.json모든 기본값으로 설정됩니다.
그런 다음 package.json그에 따라 변경할 수 있습니다.
이렇게하면 enter모든 명령을 누르지 않아도되므로 시간이 많이 절약 됩니다.npm init


6

이제 Yeoman-Modern Web App 발판 도구를 사용할 수 있습니다 3 단계 만 거치면 노드 터미널에서 을 .

먼저 yo 및 기타 필요한 도구를 설치해야합니다.

$ npm install -g yo bower grunt-cli gulp

웹 애플리케이션을 스캐 폴딩하려면 generator-webapp 생성기를 설치하십시오 .

$ npm install -g generator-webapp  // create scaffolding 

요 실행하고 ... 당신은 모두 완료 :

$ yo webapp  // create scaffolding 

Yeoman은 전체 웹 애플리케이션 또는 컨트롤러 및 모델에 대한 상용구 코드를 작성할 수 있습니다. 편집 및 컴파일을 위해 라이브 프리뷰 웹 서버를 실행할 수 있습니다. 단위 테스트를 실행하고, 코드를 최소화 및 연결하고, 이미지를 최적화하는 등의 작업을 수행 할 수있을뿐만 아니라 ...

Yeoman (yo) -앞서 언급 한 지루한 작업 중 일부를 수행하는 데 사용할 수있는 생성기라고하는 프레임 워크 별 스캐 폴드 에코 시스템을 제공하는 스캐 폴딩 도구입니다.

Grunt / gulp- 프로젝트를 빌드, 미리보기 및 테스트하는 데 사용됩니다.

Bower- 종속성 관리에 사용되므로 더 이상 프런트 엔드 라이브러리를 수동으로 다운로드 할 필요가 없습니다.


5

Pylinux의 답변을 바탕으로 아래는 Windows OS 용 솔루션입니다.

dir node_modules > abc.txt
FOR /F %k in (abc.txt) DO npm install --save

도움이 되길 바랍니다.


apm.txt 상단과 하단에 npm install을 입력하면 새 링크 제거와 함께 저장해도 작동합니다.
Roni

도움이 되더라도 잘못된 버전의 NPM 패키지가 설치되어 앱이 실패 할 수 있습니다.
jarmod

1

npm init -f 명령을 사용하여 package.json 파일을 생성 한 후 각 명령 다음에 --save를 사용하여 각 모듈이 package.json 내부에서 자동으로 업데이트되도록합니다. npm install express --save


0

1. 선택

경우 당신은 망할 놈 GitHub의 사용자 :

    generate-package보다 간단하게 npm init.

그밖에

및 / 또는 당신이 좋아하지 않아 package.json발생 패키지를 그 템플릿 또는npm init 생성 .

    스캐 폴딩 앱을 통해 generate , sails 또는 yeoman 과 같은 고유 한 템플릿을 생성 할 수 있습니다 .


2. 관련성

이 답변은 2018 년 3 월과 관련이 있습니다. 향후이 답변의 데이터는 더 이상 사용되지 않을 수 있습니다.

이 답변의 작성자는 2018 년 3 월에 개인적으로 생성 패키지를 사용했습니다.


3. 한계

generate-package를 사용하려면 git 및 GitHub를 사용해야합니다.


4. 시연

예를 들어 빈 폴더를 만듭니다 sasha-npm-init-vs-generate-package .

4.1. 패키지 생성

명령:

D:\SashaDemoRepositories\sasha-npm-init-vs-generate-package>gen package
[16:58:52] starting generate
[16:59:01]  running tasks: [ 'package' ]
[16:59:04] starting package
? Project description? generate-package demo
? Author's name? Sasha Chernykh
? Author's URL? https://vk.com/hair_in_the_wind
[17:00:19] finished package  1m

package.json:

{
  "name": "sasha-npm-init-vs-generate-package",
  "description": "generate-package demo",
  "version": "0.1.0",
  "homepage": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package",
  "author": "Sasha Chernykh (https://vk.com/hair_in_the_wind)",
  "repository": "Kristinita/sasha-npm-init-vs-generate-package",
  "bugs": {
    "url": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package/issues"
  },
  "license": "MIT",
  "engines": {
    "node": ">=4"
  },
  "scripts": {
    "test": "mocha"
  },
  "keywords": [
    "generate",
    "init",
    "npm",
    "package",
    "sasha",
    "vs"
  ]
}

4.2. npm init

D:\SashaDemoRepositories\sasha-npm-init-vs-generate-package>npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (sasha-npm-init-vs-generate-package)
version: (1.0.0) 0.1.0
description: npm init demo
entry point: (index.js)
test command: mocha
git repository: https://github.com/Kristinita/sasha-npm-init-vs-generate-package
keywords: generate, package, npm, package, sasha, vs
author: Sasha Chernykh
license: (ISC) MIT
About to write to D:\SashaDemoRepositories\sasha-npm-init-vs-generate-package\package.json:

{
  "name": "sasha-npm-init-vs-generate-package",
  "version": "0.1.0",
  "description": "npm init demo",
  "main": "index.js",
  "scripts": {
    "test": "mocha"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/Kristinita/sasha-npm-init-vs-generate-package.git"
  },
  "keywords": [
    "generate",
    "package",
    "npm",
    "package",
    "sasha",
    "vs"
  ],
  "author": "Sasha Chernykh",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package/issues"
  },
  "homepage": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package#readme"
}


Is this ok? (yes) y
{
  "name": "sasha-npm-init-vs-generate-package",
  "version": "0.1.0",
  "description": "npm init demo",
  "main": "index.js",
  "scripts": {
    "test": "mocha"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/Kristinita/sasha-npm-init-vs-generate-package.git"
  },
  "keywords": [
    "generate",
    "package",
    "npm",
    "package",
    "sasha",
    "vs"
  ],
  "author": "Sasha Chernykh",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package/issues"
  },
  "homepage": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package#readme"
}

generate-package더 간단하게 생각 합니다 npm init.


5. 커스터마이징

자신 만드는 것이 package.json, 템플릿을 참조 생성 하고 유사시 예.

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