2013-08-06 43 views
7

My package.json trông giống như thế này (tên/mô tả/v.v. bị bỏ qua).npm cài đặt dường như không nhận được tất cả các phụ thuộc

{ 
    "dependencies": { 
     "express": "3.3.4", 
     "jade": "0.34.x", 
     "mongoose": "3.6.x" 
    }, 
    "devDependencies": { 
     "vows": "0.7.x" 
    } 
} 

Tôi đã sử dụng express trên kho và chạy tự động tạo node app.js. Điều này làm việc, nhưng khi tôi sử dụng curl http://localhost:port tôi nhận được lỗi "Không thể tìm thấy phân tích cú pháp ký tự mô-đun." Tôi chạy npm install character-parser và sau đó tôi đã nhận "Không thể tìm thấy máy biến áp mô-đun." Điều này xảy ra một vài lần nữa, nhưng sau khi tôi cài đặt tất cả chúng, ứng dụng bắt đầu hoạt động.

Tôi nghĩ rằng npm install được cho là phải cài đặt phụ thuộc đệ quy. Điều này cũng khiến tôi lo lắng vì tôi rõ ràng muốn package.json có thể sử dụng được khi ứng dụng được triển khai.

+0

Nhưng npm không cài đặt đệ quy. Sau khi chạy 'npm install', có lỗi nào không? Hãy đăng chúng nếu có. – gustavohenke

+0

@gustavohenke không có lỗi, thật không may. Nó nói mọi thứ đều ổn, nhưng sau đó khi tôi cố gắng chạy nút, tôi nhận được lỗi mô-đun còn thiếu cho đến khi tôi sử dụng 'npm install '. Tôi có cần sử dụng 'sudo npm' không? –

+1

Bạn có npm-shrinkwrap.json không? Nếu bạn làm như vậy, hãy kiểm tra xem các mô-đun được yêu cầu có được liệt kê không. – Fluffy

Trả lời

-1

Khi bạn chạy npm install <name-of-package>, nó sẽ cài đặt gói vào thư mục node_modules của bạn, nhưng sẽ không thêm gói đó làm phụ thuộc. Để cài đặt gói và lưu nó như là một sự phụ thuộc vào package.json của bạn, bạn phải sử dụng --save cờ như vậy:

npm install <name-of-package> --save

Các npm documentation cung cấp thêm thông tin về cờ bổ sung có thể được sử dụng như --save-dev gắn cờ để lưu phụ thuộc phát triển và cờ --save-optional để lưu phụ thuộc tùy chọn vào package.json của bạn.

2

Dưới đây là một kịch bản đơn giản để thu thập các phụ thuộc trong ./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 + '",'); 
      } 
      }); 
     } 
     } 
    }); 

    }); 
} 

Đối với một dự án tôi đang làm việc trên, kết quả có như thế này:

"progress": "0.1.0", 
"request": "2.11.4", 

Nếu bạn nhớ để xóa dấu phẩy khỏi mục nhập cuối cùng, bạn có thể sao chép và dán đầu ra.

1

Tôi đã nhận lỗi này chính xác trong khi tôi đang NPM cài đặt cho https://github.com/HenrikJoreteg/humanjs-sample-app/

Tôi đang trên một máy tính Windows, vì vậy tôi nghi ngờ rằng đó là một vấn đề với các hạn chế kỳ quặc rằng Windows có vào số lượng ký tự trong một đường dẫn tập tin.

Tôi giải quyết điều này bằng cách rút ngắn đường dẫn cơ sở của tôi thành tên thư mục ba ký tự trong thư mục gốc của tôi (trong trường hợp này là từ C: \ projects \ humanjs-sample-ứng dụng thành C: \ hjs). Khi tôi chạy lại npm, mọi thứ đã hoạt động. Tôi không hài lòng với giải pháp đó. Tôi không cần phải lo lắng về tên đường cơ sở của tôi quá dài. Đây là một trong những lý do khiến mọi người thường không phát triển nút trên máy Windows.

Một giải pháp thay thế khác là phát triển trên Linux hoặc Mac, nếu bạn chưa có. Đó có lẽ là chiến lược dài hạn của tôi.

+0

Tôi chỉ nhận thấy bạn có một thẻ Ubuntu trên câu hỏi của bạn, vì vậy đây có thể không phải là vấn đề của bạn. Tuy nhiên, tôi sẽ không xóa điều này. – PureCognition

Các vấn đề liên quan