cài đặt npm sẽ không cài đặt devDependencies


256

Trên cửa sổ vì một số lý do khi tôi chạy, npm installnó sẽ không cài đặt devDependencies . AFAIK nó nên. Nếu tôi chạy npm install --dev devDependencies được cài đặt. Tôi không hiểu tại sao npm installkhông cài đặt devDependencies quá, nhưng chỉ cài đặt phụ thuộc. Điều gì có thể là lý do? Làm thế nào tôi có thể sửa chữa nó?

Có lẽ có điều gì đó không ổn với gói.json của tôi ? Nó được liệt kê dưới đây nếu nó có thể hữu ích:

{
  "name": "try-brunch",
  "version": "0.1.0",
  "private": "true",
  "devDependencies": {
    "brunch": "^2.0.4",
    "cssnano-brunch": "^1.1.5",
    "javascript-brunch": "^1.8.0",
    "sass-brunch": "^1.9.2",
    "uglify-js-brunch": "^1.7.8"
  },
  "dependencies": {
    "jquery": "^2.1.4"
  }
}

5
Tại sao chúng ta thậm chí cần một sửa chữa cho nó? Nó nên là mặc định! devDependencieslà phụ thuộc theo nghĩa đen cho các nhà phát triển của mô-đun . Tôi đặt cược hầu hết chúng ta npm installmột mô-đun để sử dụng nó, thay vì phát triển nó.
Toàn cảnh

Giả sử bạn viết một ứng dụng và bạn cần một plugin logger hoặc webpack. Đó là những devdeps. những người cần phải được cài đặt. npm không cài đặt chúng trong một số trường hợp.
Tristan Tzara

1
Ý tôi là, việc cài đặt devDependencieschỉ cần thiết khi bạn viết gói (ứng dụng). Sử dụng nó không yêu cầu devDependencies. Vì vậy, nó là hợp lý devDependenciesđể yêu cầu thêm cờ được cài đặt. Nếu npm installđược cài đặt devDependencies theo mặc định , người dùng cũng sẽ nhận được các gói dự phòng.
Toàn cảnh

hành vi được ghi lại là khi tôi làm npm itrong thư mục của mình, nó lấy py package.jsonvà cài đặt cả deps và devdeps. Đây là cách nó dự định hoạt động và nó có ý nghĩa (ví dụ như khi tôi làm npm isau khi git clonetôi mong muốn có tất cả những gì tôi cần, bao gồm cả các plugin webpack). Câu hỏi này giải quyết một lỗi, khi hành vi thực tế khác với dự định. xin vui lòng, hãy xem tài liệu - docs.npmjs.com/cli/install . Có một lá cờ để không cài đặt devdeps, nhưng hành vi mặc định là cài đặt chúng, điều này có ý nghĩa hoàn hảo và là điều mọi người mong đợi
Tristan Tzara

Tôi không thấy bất kỳ lý do lành mạnh nào để khiến tôi nhớ chạy một lệnh khác để cài đặt, ví dụ như các plugin webpack hoặc defs loại bản in hoặc bất kỳ devdeps nào khác mỗi khi tôi kéo. npm i nên bootstrap cả hai, đó là hành vi có chủ đích, lành mạnh và được ghi lại, vì vậy tôi thực sự không hiểu tại sao bạn nói rằng vấn đề này phải là một tiêu chuẩn
Tristan Tzara

Câu trả lời:


306

Kiểm tra tài liệu NPM để cài đặt

Với --productioncờ (hoặc khi biến môi trường NODE_ENV được đặt thành sản xuất), npm sẽ không cài đặt các mô-đun được liệt kê trong devDependencies. "

Đối --only={prod[uction]|dev[elopment]}số sẽ chỉ gây ra devDependencies hoặc chỉ không devDependencies được cài đặt bất kể NODE_ENV. "

Bạn đã thử chưa

npm install --only=dev

Nếu bạn lo lắng rằng gói.json của bạn có thể không chính xác, điều tốt nhất nên làm là điều này. Tạo một thư mục mới và chạy:

npm init --yes

Sau đó:

npm install --save-dev brunch@^2.0.4
npm install --save-dev cssnano-brunch@^1.1.5
npm install --save-dev javascript-brunch@^1.8.0
npm install --save-dev sass-brunch@^1.9.2
npm install --save-dev uglify-js-brunch@^1.7.8
npm install jquery@^2.1.4 --save

Và bạn nên đi thật tốt! Nếu không, sẽ tiếp tục đăng các tùy chọn khác.

Kiểm tra cấu hình npm của bạn:

npm config list

npm nhận cài đặt cấu hình của nó từ dòng lệnh, biến môi trường và tệp npmrc. Vì vậy, kiểm tra các biến môi trường và tệp npmrc .

Vẫn thất bại?

Ok, tạo một thư mục mới, lý tưởng ở một nơi khác trên hệ thống tập tin của bạn. I E. không cùng phân cấp thư mục. Chẳng hạn, C: \ myNewFolder - càng gần cơ sở C: càng tốt.

Sau đó chạy:

npm init --yes

Bây giờ chạy:

npm install underscore --save

và cuối cùng:

npm install mocha --save-dev

Có phải mọi thứ hoạt động như mong đợi?

Những gì tôi đang cố gắng làm là hiểu liệu vấn đề của bạn là toàn cầu, hay một cái gì đó cục bộ đối với thư mục và phụ thuộc trước đó.


Tristan - điều này có giúp gì cho tình huống của bạn không? Xin vui lòng bạn có thể đánh dấu câu trả lời là chính xác, hoặc nếu không cho tôi biết kết quả của việc thử ở trên?
arcseldon

2
npm install --only = dev cài đặt devdeps, nhưng tôi muốn cài đặt cả deps và devdeps cùng một lúc. pack.json có vẻ ổn, vì việc tạo lại nó không thay đổi gì cả. Tôi có đúng không khi NODE_ENV tồn tại trên toàn cầu, dưới dạng giá trị mặc định và cục bộ, làm giá trị cho dự án? Tôi có thể kiểm tra và thay đổi các giá trị này ở đâu trên các cửa sổ (Tôi đã xem và tôi không có biến hệ thống NODE_ENV)
Tristan Tzara

@TristanTzara - tôi làm việc gần như độc quyền trên MAC những ngày này. Tuy nhiên, từ ký ức của những ngày đã qua (nhiều năm trước trên NT và XP) - bạn có thể nhập nội dung nào đó như "set" vào cửa sổ nhắc lệnh không. . Bạn đang tìm kiếm một "chìa khóa" với NODE_ENV. Tôi sẽ google ngay bây giờ cho một tùy chọn windows nhưng đăng nó trong trường hợp nó giúp.
arcseldon

Liên kết tại đây - winaero.com/blog/ từ
arcseldon

@TristanTzara - đó là điều tốt để biết. Một suy nghĩ, kiểm tra tất cả các thư mục cha trên thư mục của bạn không hoạt động. Hãy tìm một thư mục node_modules hiện có ... npm sẽ tìm kiếm lên khi cố gắng giải quyết một phụ thuộc và nó có thể là một cái gì đó kỳ lạ giống như nó đang nhặt một mô-đun đã cài đặt hiện có lên trên cây thư mục, và do đó từ chối cài đặt của bạn trong thư mục con . Địa điểm thông thường nằm ngay trong thư mục nhà của bạn .. Chúc may mắn và cảm ơn vì đã thừa nhận câu trả lời của tôi: D
arcseldon

85

Kiểm tra xem giá trị sản xuất cấu hình npm được đặt thành đúng không. Nếu giá trị này là đúng, nó sẽ bỏ qua các phụ thuộc dev.

Chạy npm config get production

Để đặt nó: npm config set -g production false


Tôi tự hỏi nếu, ở đâu đó giữa npm 5.x và npm 6.x, nếu không có giá trị nào được đặt, mặc định sẽ trở thành truechứ false?
James Perih

38

đảm bảo bạn không NODE_ENVđặt biến env thành 'sản xuất'.

Nếu bạn làm như vậy, phụ thuộc dev sẽ không được cài đặt mà không có --devcờ


Tôi đã xem xét các biến hệ thống của tôi và tôi thậm chí không có cái này ở đó. Có lẽ tôi nhìn nhầm chỗ?
Tristan Tzara

13
Xin lưu ý rằng npm install --devcài đặt devDependencies đệ quy . Điều này gần như không bao giờ là những gì bạn muốn, và trên thực tế không được chấp nhận .
Wonko

Cảm ơn bạn. Tôi không biết rằng điều này sẽ ảnh hưởng đến cài đặt npm thông thường, nhưng đó là logic. :)
Lothre1

6
Việc sử dụng --devtùy chọn không được chấp nhận. Sử dụng --only=devthay thế
Sarath Ak

16

Tôi đã có một package-lock.jsontệp từ phiên bản cũ của gói.json, tôi đã xóa tệp đó và sau đó mọi thứ được cài đặt chính xác.


Chơi lô tô! Điều đó đã giải quyết vấn đề của tôi. Có vẻ như chúng ta nên đã cam kết điều này vào repo.
ngẫu nhiên

9

Tôi đã có một vấn đề tương tự. npm install --only=devkhông làm việc, và cũng không npm rebuild. Cuối cùng, tôi đã phải xóa node_modulespackage-lock.jsonvà chạy npm installlại. Điều đó đã sửa nó cho tôi.


7

Bạn có thể sử dụng cách ngắn để chỉ phụ thuộc cài đặt để phát triển như sau:

npm i -D <dependencies-names>

câu trả lời tốt nhất. Shpuld đứng đầu
wwwwwwwwwwww

6

Hãy chắc chắn rằng bạn package.jsonhợp lệ ...

Tôi đã có lỗi sau ...

npm WARN Invalid name: "blah blah blah"

và điều đó, tương tự, gây ra devDependencieskhông được cài đặt.

FYI, thay đổi package.json"tên" để blah-blah-blahsửa nó.


0

Tôi có cùng một vấn đề vì tôi đặt NODE_ENV=productiontrong khi xây dựng Docker. Sau đó tôi thêm một cái nữa npm install --only=dev. Mọi thứ đều hoạt động tốt. Tôi cần các devDependencies để xây dựng các mô-đun TypeSciprt

RUN npm install
RUN npm install --only=dev
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.