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


380
127
Lý Hoàng Long
8 năm trước

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?

Hữu ích 380 Yêu thích 127 Chia sẻ Viết bình luận 5
Không hữu ích

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

Hữu ích 21 · Không hữu ích · Trả lời 0

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

Hữu ích 2 · Không hữu ích · Trả lời 0

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

Hữu ích 1 · Không hữu ích · Trả lời 0

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

Hữu ích 1 · Không hữu ích · Trả lời 0

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

Hữu ích 0 · Không hữu ích · Trả lời 0

10 Trả lời


578
Võ Kim Anh
7 năm trước

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ụ bạn có thể sử dụng trong các dự án của riêng mình để tạo tệp này theo chương trình (do nhà sản xuất npm tạo ra): https://github.com/isaacs/init-package-json

Hữu ích 578 Chia sẻ Viết bình luận 5
Không hữu ích

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.

Hữu ích 73 · Không hữu ích · Trả lời 0

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

Hữu ích 9 · Không hữu ích · Trả lời 0

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?

Hữu ích 4 · Không hữu ích · Trả lời 0

npm init --force --yeslà lớp lót để tạo tệp này

Hữu ích 3 · Không hữu ích · Trả lời 0

@neuromancer vui lòng đánh dấu một câu trả lời (cái này?) là được chấp nhận.

Hữu ích 1 · Không hữu ích · Trả lời 0

199
Phạm Cao Uy
7 năm trước

Trước hết, chạy

npm init

... sẽ hỏi bạn một vài câu hỏi ( đọc phần 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's dependenciesdanh 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.)

Hữu ích 199 Chia sẻ Viết bình luận 5
Không hữu ích

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.

Hữu ích 31 · Không hữu ích · Trả lời 0

npm uninstall <pkg> --saveđể cập nhật trong khi gỡ cài đặt.

Hữu ích 7 · Không hữu ích · Trả lời 0

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

Hữu ích 6 · Không hữu ích · Trả lời 0

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

Hữu ích 1 · Không hữu ích · Trả lời 0

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

Hữu ích 0 · Không hữu ích · Trả lời 0

168
Đỗ Khắc Duy
7 năm trước

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ẻ!

Hữu ích 168 Chia sẻ Viết bình luận 5
Không hữu ích

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

Hữu ích 37 · Không hữu ích · Trả lời 0

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

Hữu ích 11 · Không hữu ích · Trả lời 0

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)

Hữu ích 3 · Không hữu ích · Trả lời 0

Đâ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.

Hữu ích 2 · Không hữu ích · Trả lời 0

Điều này cần một loạt các upvote!

Hữu ích 0 · Không hữu ích · Trả lời 0

77
Trần Như Khánh
6 năm trước

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.

Hữu ích 77 Chia sẻ Viết bình luận 5
Không hữu ích

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

Hữu ích 5 · Không hữu ích · Trả lời 0

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.

Hữu ích 5 · Không hữu ích · Trả lời 0

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

Hữu ích 1 · Không hữu ích · Trả lời 0

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!

Hữu ích 0 · Không hữu ích · Trả lời 0

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

Hữu ích 0 · Không hữu ích · Trả lời 0

24
Hoàng Diễm Quyên
6 năm trước

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

EX:

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

EX:

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

EX:

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

Hữu ích 24 Chia sẻ Viết bình luận 0
Không hữu ích

13
Hoàng Hữu Khoát
3 năm trước

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

Hữu ích 13 Chia sẻ Viết bình luận 0
Không hữu ích

6
Hoàng Hồng Phát
4 năm trước

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 các thư viện giao diện người dùng của mình.

Hữu ích 6 Chia sẻ Viết bình luận 0
Không hữu ích

4
Dương Hữu Thiện
5 năm trước

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.

Hữu ích 4 Chia sẻ Viết bình luận 2
Không hữu ích

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 loại bỏ liên kết mới sẽ hoạt động ngay cả.

Hữu ích 0 · Không hữu ích · Trả lời 0

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.

Hữu ích 0 · Không hữu ích · Trả lời 0

1
Đặng Việt Anh
4 năm trước

sử dụng lệnh npm init -f để tạo tệp pack.json và sau đó sử dụng - lưu 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

Hữu ích 1 Chia sẻ Viết bình luận 0
Không hữu ích

0
Trịnh Phi Phi
2 năm trước

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 .

Hữu ích 0 Chia sẻ Viết bình luận 0
Không hữu ích

Trả lời của bạn

Xem trước nội dung