Có cách nào để tự động xây dựng tệp pack.json cho các dự án Node.js


412

Là pack.json được cho là chỉnh sửa thủ công? Không thể một chương trình như npm chỉ xem qua các tệp, xem các câu lệnh "yêu cầu" và sau đó sử dụng nó để đặt các mục cần thiết trong tệp pack.json? Có chương trình nào như vậy không?


2
Cho đến bây giờ, tôi đã chỉnh sửa tệp bằng tay: thêm mọi gói (và phiên bản tối thiểu) tôi cần. sau đó chạynpm link
pkyeck

22
@neuromancer bạn có thể vui lòng chấp nhận câu trả lời đúng không? Đây rõ ràng là người có hơn 38 phiếu bầu ...
Esteban

2
npmjs.org/doc/install.html , điều này cũng có thể được sử dụng để tự động cập nhật gói.json trong khi cài đặt gói mới
V31

1
@neromancer, đặt sách Gibson của bạn xuống và sửa cái này! :)
prasanthv

1
npmjs.com/package/npm-collect thực hiện chính xác điều này và hơn thế nữa
coderofsalvation

Câu trả lời:


601

Tệp pack.json được npm sử dụng để tìm hiểu về dự án node.js của bạn.

Sử dụng npm init để tạo tệp pack.json cho bạn!

Nó đi kèm với npm. Đọc tài liệu của nó ở đây: https://docs.npmjs.com/cli/init

Ngoài ra, có một công cụ chính thức mà bạn có thể sử dụng để tạo tệp này theo chương trình: https://github.com/npm/init-package-json


9
Cảm ơn npm initchỉ là những gì tôi đang tìm kiếm! Ngoài ra sau đó tôi thường chạy npm shrinkwrapđể tạo một npm-shrinkwrap.jsontệp
Jasdeep Khalsa

75
Per npm init: Sử dụng npm install <pkg> --savesau đó để cài đặt một gói và lưu nó dưới dạng phụ thuộc trong tệp pack.json.
Brad Koch

5
Sau khi chạy npm inittrong Bảng điều khiển quản lý gói từ Visual Studio 2015, nó chỉ hiển thị [...] Press ^C at any time to quit.và dừng lại mà không hỏi bất cứ điều gì hoặc tạo tệp json. Tui bỏ lỡ điều gì vậy?
Michael Hilus

2
npmjs.com/package/npm-collect cho phép bạn thu thập bất kỳ mô-đun nào đã được cài đặt
coderofsalvation

3
npm init --force --yeslà lớp lót để tạo tệp này
Bernhard Döbler

204

Trước hết, chạy

npm init

... sẽ hỏi bạn một vài câu hỏi ( đọc cái này trước ) về dự án / gói của bạn và sau đó tạo tệp pack.json cho bạn.

Sau đó, khi bạn có tệp pack.json, hãy sử dụng

npm install <pkg> --save

hoặc là

npm install <pkg> --save-dev

... để cài đặt một sự phụ thuộc và tự động thêm nó vào của bạn package.json'sdependencies danh sách.

(Lưu ý: Bạn có thể cần phải điều chỉnh thủ công các phạm vi phiên bản cho các phụ thuộc của mình.)


6
có vẻ như bây giờ nó không tạo ra pack.json. win7x64 nút0.10.9
atian25

33
Tôi không thực sự đánh giá cao việc có toàn bộ câu trả lời của mình, tiết kiệm cho một dòng, viết lại và vẫn được quy cho tôi. Bất kể nó có lỗi thời hay không.
nzondlo

Tài liệu cụ thể về npm init có ở đây
shmim

1
Đây phải là câu trả lời chính xác. Bạn không cần phải chạm thủ công package.json, nó thường được xử lý tự động.
Sallar

1
--savekhông còn cần thiết trong các phiên bản npm mới hơn
David Callanan

180

Tôi chỉ viết một tập lệnh đơn giản để thu thập các phụ thuộc trong ./node_modules. Nó đáp ứng yêu cầu của tôi tại thời điểm này. Điều này có thể giúp một số người khác, tôi gửi nó ở đây.

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();

Trong trường hợp của tôi, tập lệnh trên xuất ra:

"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.

Bây giờ, bạn có thể sao chép và dán chúng. Chúc vui vẻ!


39
bạn nên xuất bản nó dưới dạng một mô-đun npm
Ben

Bây giờ bạn phải làm gì khi nhận được 770 dòng trở lại ..? Tôi chỉ có 58 trong gói.json, bao gồm cả devDependencies: - /
Sherzod

3
Lưu ý rằng tích hợp sẵn npm ls --depth=0sẽ in ít nhiều giống nhau (không chắc là trường hợp đó vào năm 2012)
jakub.g

3
Đây không phải là một cách chính xác để xử lý này. Điều này sẽ xuất ra mọi phụ thuộc trong mỗi mô-đun. Vì vậy, nếu gói bạn cần gói a, và gói acần gói bc, kịch bản này sẽ ra tất cả các cấp, vì vậy a, b, cđó là không chính xác. Nó chỉ nên xuất ra a, các gói phụ sẽ được tự động giải quyết.
Sallar

Có phải tôi, hoặc có vẻ như hầu hết các câu trả lời đều cho rằng bạn không bắt đầu từ một hệ thống hiện có nơi node_modules được sao chép hoặc xây dựng bằng tay? Có những lúc tôi trao một thư mục dự án, với các mô-đun riêng trong đó và tôi không có quyền truy cập vào kho lưu trữ. Tôi vẫn muốn tự động tái tạo dự án khi tôi đặt các mô-đun vào kho lưu trữ MY. Hoặc có lẽ tôi được bảo là 'chỉ cần sao chép thư mục node_modules này'. vâng, vâng, thực hành tốt nhất, nhưng tôi đối phó với thực tế của các nhà phát triển có thể không biết họ đang làm gì. Điều này giúp tôi bắt đầu thực hiện một dự án như vậy. Cám ơn vì đã chia sẻ!
noelhx

82

npm init

để tạo tệp pack.json và sau đó bạn sử dụng

ls node_modules/ | xargs npm install --save

để điền vào các mô-đun bạn có trong thư mục node_modules.

Chỉnh sửa: @paldepind chỉ ra rằng lệnh thứ hai là dư thừa vì npm initbây giờ sẽ tự động thêm những gì bạn có trong thư mục node_modules / của bạn. Tôi không biết nếu điều này luôn luôn như vậy, nhưng ít nhất bây giờ, nó hoạt động mà không có lệnh thứ hai.


5
Điều này cực kỳ hữu ích nếu bạn không sử dụng --save cho mọi mô-đun bạn đã cài đặt.

7
Tôi thấy rằng npm initđã tự động thêm các phụ thuộc dựa trên các gói đã cài đặt và không cần phải chạy lệnh thứ hai.
paldepind

Tôi rất vui vì bạn có thể phụ thuộc vào tên thư mục node_modules theo cách này ... phew!
DT Rush

Điều này cũng rất hữu ích khi sử dụng npm dedupe, giúp kéo các phụ thuộc được chia sẻ giữa các mô-đun của bạn ra khỏi các mô-đun đó và lưu trữ chúng ở cấp cao nhất của node_modulesthư mục của bạn . Nhưng nó không chạm vào package.json! Với điều này, bạn có thể cam kết và chia sẻ thiết lập trùng lặp của mình.
Tác nhân gây bệnh

1
Câu trả lời tuyệt vời cho bất cứ ai thêm gói.json sau khi thực tế.
Carrie Kendall

24

Dòng lệnh :

npm init

sẽ tạo tập tin pack.json

Để cài đặt, cập nhật và gỡ cài đặt các gói theo phụ thuộc vào tệp pack.json:

Dòng lệnh :

npm install <pkg>@* --save 

sẽ tự động thêm phiên bản mới nhất cho gói theo phụ thuộc vào tệp pack.json

VÍ DỤ:

npm install node-markdown@* --save

Dòng lệnh :

npm install <pkg> --save

cũng sẽ tự động thêm phiên bản mới nhất cho gói theo phụ thuộc vào tệp pack.json

nếu bạn cần phiên bản cụ thể cho gói, hãy sử dụng dòng lệnh này :

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

sẽ tự động thêm phiên bản cụ thể của gói theo phụ thuộc vào tệp pack.json

VÍ DỤ:

npm install koa-views@1.0.0 --save

nếu bạn cần phạm vi phiên bản cụ thể cho gói, hãy sử dụng dòng lệnh này :

npm install <pkg>@<version range>

sẽ tự động thêm phiên bản mới nhất cho gói giữa phạm vi phiên bản theo phụ thuộc vào tệp pack.json

VÍ DỤ:

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

Để biết thêm chi tiết về cách viết phiên bản cho gói npm Doc

Dòng lệnh :

npm update --save

sẽ cập nhật các gói thành tệp pack.json và sẽ tự động thêm phiên bản cập nhật cho tất cả các gói theo phụ thuộc vào tệp pack.json

Dòng lệnh :

npm uninstall <pkg> --save

sẽ tự động xóa gói khỏi phụ thuộc vào tệp pack.json và xóa gói khỏi thư mục node_module


14

Chạy npm init -ylàm cho bạn package.jsonvới tất cả các mặc định.
Sau đó, bạn có thể thay đổi package.jsontương ứng
Điều này giúp tiết kiệm thời gian nhiều lần bằng cách ngăn nhấn entervào mọi lệnh trongnpm init


6

Bây giờ bạn có thể sử dụng Yeoman - Công cụ giàn giáo ứng dụng web hiện đại trên thiết bị đầu cuối nút bằng 3 bước đơn giản.

Trước tiên, bạn sẽ cần cài đặt yo và các công cụ cần thiết khác:

$ npm install -g yo bower grunt-cli gulp

Để tạo ra một ứng dụng web, hãy cài đặt trình tạo trình tạo webapp :

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

Chạy yo và ... bạn đã hoàn tất:

$ yo webapp  // create scaffolding 

Yeoman có thể viết mã soạn sẵn cho toàn bộ ứng dụng web hoặc Bộ điều khiển và Mô hình. Nó có thể kích hoạt một máy chủ web xem trước trực tiếp để chỉnh sửa và biên dịch; không chỉ là bạn cũng có thể chạy thử nghiệm đơn vị của mình, thu nhỏ và ghép mã của bạn, tối ưu hóa hình ảnh và hơn thế nữa ...

Yeoman (yo) - công cụ giàn giáo cung cấp một hệ sinh thái của giàn giáo cụ thể theo khung, được gọi là máy phát điện, có thể được sử dụng để thực hiện một số nhiệm vụ tẻ nhạt được đề cập trước đó.

Grunt / gulp - được sử dụng để xây dựng, xem trước và kiểm tra dự án của bạn.

Bower - được sử dụng để quản lý phụ thuộc, do đó bạn không còn phải tải xuống thủ công các thư viện của mình.


5

Dựa trên câu trả lời của Pylinux, dưới đây là giải pháp cho HĐH Windows,

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

Hy vọng nó giúp.


Hoặc, bạn chỉ có thể nhập cài đặt npm ở đầu abc.txt và ở dưới cùng - lưu với xóa liên kết mới sẽ hoạt động đồng đều.
Roni

Lưu ý rằng, trong khi hữu ích, điều này có thể cài đặt các phiên bản sai của các gói NPM, điều này có thể khiến ứng dụng bị lỗi.
jarmod

1

sử dụng lệnh npm init -f để tạo tệp pack.json và sau đó sử dụng --save sau mỗi lệnh để mỗi mô-đun sẽ tự động được cập nhật bên trong gói.json của bạn cho ex: npm install express --save


0

1. Lựa chọn

Nếu bạn git và người dùng GitHub:

    generate-packageđơn giản hơn, hơn npm init.

khác

và / hoặc bạn không thích package.jsonmẫu, gói npm inittạo hoặc tạo:

    bạn có thể tạo mẫu của riêng mình thông qua các ứng dụng giàn giáo như tạo , buồm hoặc yeoman .


2. Sự liên quan

Câu trả lời này có liên quan đến tháng 3 năm 2018. Trong tương lai, dữ liệu từ câu trả lời này có thể bị lỗi thời.

Tác giả của câu trả lời này đã sử dụng gói tạo cá nhân vào tháng 3 năm 2018.


3. Hạn chế

Bạn cần sử dụng git và GitHub để sử dụng gói tạo.


4. Trình diễn

Ví dụ, tôi tạo thư mục trống sasha-npm-init-vs-generate-package.

4.1. tạo gói

Chỉ huy:

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"
}

Tôi nghĩ rằng, generate-packageđơn giản hơn, đó npm init.


5. Tùy chỉnh

Điều đó tạo ra package.jsonmẫu của riêng bạn, xem các ví dụ tạoyeoman .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.