npm init là lệnh cơ bản nhưng cực kỳ quan trọng trong quy trình khởi tạo một dự án Node.js. Lệnh này giúp lập trình viên tạo tệp package.json, nơi lưu trữ thông tin về tên, phiên bản, dependencies và script. Khi chạy npm init, người dùng sẽ được hướng dẫn qua từng bước nhập thông tin cơ bản, từ đó xây dựng nền tảng vững chắc cho quá trình phát triển.
Đọc bài viết sau để được giải đáp chi tiết hơn về:
- npm init là gì và hoạt động thế nào
- Cú pháp lệnh và các tuỳ chọn phổ biến
- Sự khác biệt giữa
npm init,npm init -y,npm init --scope=@orgname - Cách tạo workspace với
npm init -w - Hướng dẫn khởi tạo một dự án với npm init
- Cách thiết lập cấu hình tùy chọn cho lệnh npm init
Đọc chi tiết: NPM là gì: Khái niệm, lệnh và thao tác cơ bản với NPM
Lệnh npm init được dùng để làm gì?
Lệnh npm init <initializer> được sử dụng để thiết lập một gói npm mới hoặc cập nhật một gói npm hiện có.
Cụ thể, initializer là một gói npm có tên dạng create-<initializer>. Khi bạn chạy npm init, npm sẽ tự động gọi npm exec để cài đặt rồi thực thi tập tin chính (main bin) của nó. Thông thường lệnh này thường được dùng để:
- Tạo hoặc cập nhật tệp package.json
- Thực hiện các bước khởi tạo khác (ví dụ: tạo thư mục, script mẫu, hoặc cấu hình build)
Ví dụ, npm sẽ dịch tự động các lệnh sau:
npm init foo -> npm exec create-foo
npm init @usr/foo -> npm exec @usr/create-foo
npm init @usr -> npm exec @usr/create
Nếu bạn không chỉ định initializer (tức là chỉ gõ npm init), npm sẽ quay lại hành vi khởi tạo mặc định (legacy init). Khi đó, nó sẽ hiển thị hàng loạt câu hỏi và tạo tệp package.json cho bạn.
Trong quá trình này, npm sẽ cố gắng tự động điền các giá trị hợp lý dựa trên những trường, dependencies hoặc tùy chọn đã có sẵn. Quá trình này mang tính bổ sung (additive), nghĩa là npm sẽ giữ nguyên mọi giá trị và trường đã được thiết lập trước đó.
Bạn cũng có thể sử dụng tùy chọn -y hoặc --yes để bỏ qua toàn bộ bước trả lời câu hỏi và khởi tạo tệp package.json với các giá trị mặc định. Ngoài ra, nếu bạn thêm tùy chọn --scope, npm sẽ tự động tạo một gói có phạm vi (scoped package).
npm init -y là gì và khác gì npm init thường?
Lệnh npm init -y được sử dụng để tự động thiết lập tất cả các câu trả lời trong quá trình khởi tạo dự án bằng giá trị mặc định.
Khi chạy lệnh này, npm sẽ tạo ngay lập tức một tệp package.json với các giá trị mặc định mà không cần bạn phải trả lời bất kỳ câu hỏi nào. Đây là cách khởi tạo nhanh chóng, tiện lợi cho những dự án thử nghiệm hoặc khi bạn muốn tiết kiệm thời gian thiết lập ban đầu.
Bên cạnh npm -y thì còn một cách dùng khác để tự động tạo một tệp package.json với các giá trị mặc định là npm init --force. Tuy nhiên, đây là một cách dùng cũ và thay thế cho npm init --yes (npm init -y). Flag –force không còn được ghi trong tài liệu chính thức của npm init, nhưng hành vi trước đây của nó là bỏ qua bảng câu hỏi tương tác và chấp nhận các cài đặt mặc định.
Thông thường, lệnh npm init sẽ chạy một bảng câu hỏi tương tác để thu thập thông tin cho tệp package.json của dự án mới. Bảng câu hỏi này bao gồm các trường như name, version, description, main, author, license,… Lệnh npm init --yes (-y) sẽ bỏ qua tất cả các câu hỏi này và tạo ngay một tệp package.json, sử dụng các giá trị mặc định dựa trên thư mục hiện tại và cấu hình người dùng npm của bạn.
Lệnh npm init –scope=@orgname là gì?
Lệnh npm init --scope=@orgname được sử dụng để khởi tạo một gói npm mới trong phạm vi (scope) của một tổ chức cụ thể. Lệnh này giúp tạo tệp package.json cho dự án mới, đồng thời tự động cấu hình tên gói để liên kết với phạm vi của một tổ chức hoặc người dùng trên npm.
- Gói theo phạm vi (Scoped Packages): npm cho phép tạo các “gói theo phạm vi”, tức là những gói được đặt trong không gian tên (namespace) của một người dùng hoặc tổ chức cụ thể. Cách này giúp tránh xung đột tên và quản lý các gói có liên quan một cách khoa học hơn.
- Phạm vi tổ chức (Organization Scope): Khi bạn sử dụng –scope=@orgname, npm init sẽ tự động tạo tệp package.json với trường name được định dạng sẵn theo mẫu @orgname/package-name.
- Tạo tệp package.json: Tương tự như khi chạy lệnh npm init thông thường, bạn sẽ được hướng dẫn qua một loạt câu hỏi để thu thập thông tin về gói. Dữ liệu này sau đó được dùng để tạo tệp package.json hoàn chỉnh..
- Quản lý không gian tên (Namespace Management): Lệnh này đặc biệt hữu ích khi phát triển nhiều gói trong cùng một đội ngũ hoặc tổ chức, vì nó giúp thiết lập không gian tên thống nhất cho toàn bộ các gói được công bố trên npm registry.
Ví dụ, di chuyển đến thư mục gốc nơi bạn muốn tạo gói mới và chạy lệnh:
npm init --scope=@myorganization
Làm theo các hướng dẫn trên màn hình để điền thông tin chi tiết về gói của bạn. Sau khi hoàn tất, tệp package.json sẽ được tạo, trong đó trường name phản ánh phạm vi bạn đã chỉ định.
{
"name": "@myorganization/my-new-package",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Ví dụ thực tế về npm init
Dưới đây là một số ví dụ phổ biến khi khởi tạo dự án hoặc gói npm mới:
- Tạo một dự án React mới bằng cách sử dụng create-react-app:
$ npm init react-app ./my-react-app
- Hoặc tạo một gói mới tương thích với ESM (ECMAScript Module) bằng create-esm:
$ mkdir my-esm-lib && cd my-esm-lib
$ npm init esm --yes
- Tạo một tệp package.json theo cách truyền thống (legacy init):
$ mkdir my-npm-pkg && cd my-npm-pkg
$ git init
$ npm init
- Khởi tạo tệp package.json mà không cần trả lời bất kỳ câu hỏi nào:
$ npm init -y
Tạo workspace mới trong dự án bằng npm init -w
Bạn có thể tạo một workspace mới trong dự án của mình bằng cách sử dụng tùy chọn cấu hình workspace. Dùng lệnh:
npm init -w <dir>
Khi đó, CLI (Command Line Interface) sẽ tự động tạo thư mục và các tệp khởi tạo (boilerplate) cần thiết, đồng thời thêm tham chiếu vào phần “workspaces”: [] trong tệp package.json của dự án chính để đảm bảo workspace mới được thiết lập đúng cách.
- Lưu ý: npm workspace chỉ hoạt động đối với npm v7 trở lên. Do đó, hãy đảm bảo bạn đã cập nhật npm trước khi bắt đầu sử dụng tính năng này.
Một ví dụ về npm workspace, bạn có một dự án chưa có workspace, cấu trúc ban đầu như sau:
.
+-- package.json
Bạn có thể tạo một workspace mới bằng lệnh:
npm init -w packages/a
Lệnh này sẽ tạo một thư mục mới cùng với tệp package.json bên trong, đồng thời cập nhật package.json cấp cao nhất để thêm tham chiếu đến workspace mới vừa tạo. Cấu trúc sau khi thực hiện sẽ trở thành:
.
+-- package.json
`-- packages
`-- a
`-- package.json
Khởi tạo workspace với trình khởi tạo (initializer)
Lệnh workspaces init cũng hỗ trợ cú pháp:
npm init <initializer> -w <dir>
Cú pháp này tuân theo các quy tắc đã được trình bày ở phần mô tả ban đầu. Ví dụ, nếu bạn muốn tạo một ứng dụng React bằng công cụ create-react-app và đặt nó làm workspace con trong dự án, bạn có thể chạy lệnh:
npm init react-app -w packages/my-react-app .
Lệnh này sẽ đảm bảo rằng ứng dụng React của bạn được tạo đúng cách, nằm trong thư mục packages/my-react-app, và tệp package.json chính sẽ được cấu hình để nhận diện workspace này.
Một điểm cần lưu ý là npm exec sẽ được thực thi trong ngữ cảnh của thư mục workspace mới được tạo. Do đó, trong ví dụ trên, phần react-app . có nghĩa là trình khởi tạo sẽ chạy trong thư mục hiện tại của workspace. Cấu trúc cuối cùng của dự án sau khi khởi tạo sẽ như sau:
.
+-- package.json
`-- packages
+-- a
| `-- package.json
`-- my-react-app
+-- README
+-- package.json
`-- ...
Thực hành khởi tạo một dự án Node.jsvới npm init
Để tạo một dự án Node.js, lệnh npm init được sử dụng trong thư mục mà người dùng muốn khởi tạo dự án. Dòng lệnh sẽ hiển thị một loạt câu hỏi như: tên dự án, giấy phép (license), các script, mô tả, tên tác giả, từ khóa, phiên bản hay tệp chính (main file).
Sau khi hoàn tất, npm sẽ tạo ra tệp package.json trong thư mục dự án, đóng vai trò như “chứng nhận” rằng dự án Node.js đã được khởi tạo thành công.
Bước 1: Tạo ứng dụng Nodejs
Trước khi bắt đầu phát triển, bạn cần khởi tạo một dự án Node.js để thiết lập cấu trúc cơ bản và tạo tệp package.json, nơi quản lý toàn bộ thông tin của dự án như tên, phiên bản, script và dependencies.
Để làm điều này, hãy mở Terminal hoặc Command Prompt, di chuyển đến thư mục nơi bạn muốn tạo dự án, rồi nhập lệnh sau:
npm init
Lệnh này sẽ kích hoạt trình hướng dẫn (interactive prompt) giúp bạn cài đặt các thông tin ban đầu cho dự án.
Bước 2: Cài đặt dự án
Sau khi chạy lệnh trên, npm sẽ lần lượt đưa ra các câu hỏi liên quan đến dự án, chẳng hạn như tên gói (package name), mô tả, tác giả hay giấy phép. Bạn có thể:
- Nhấn Enter để chọn giá trị mặc định, hoặc
- Nhập giá trị tùy chỉnh phù hợp với dự án của mình.
Ví dụ minh họa trong PowerShell:
PS D:\ITviec\Demo> 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 init` 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: (demo)
version: (1.0.0)
description: "Tutorial For npm init"
entry point: (index.js) app.js
test command:
git repository:
keywords: ITviec, Nodejs
author: ITviec
license: (ISC) MIT
About to write to D:\ITviec\Demo\package.json:
{
"name": "demo",
"version": "1.0.0",
"description": "\"Tutorial For npm init\"",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"ITviec",
"Nodejs"
],
"author": "Itviec",
"license": "MIT"
}
Is this OK? (yes)
Chỉ cần nhập yes, quá trình khởi tạo sẽ hoàn tất. Khi đó, tệp package.json sẽ được tạo trong thư mục dự án. Đánh dấu việc bạn đã chính thức khởi động một ứng dụng Node.js với đầy đủ cấu hình cơ bản.
Đọc chi tiết: NPM install: Hướng dẫn cách cài đặt và quản lý các gói package
Thiết lập tùy chọn cấu hình cho lệnh npm init
Trình quản lý gói Node Package Manager (npm) cho phép bạn thiết lập các tùy chọn cấu hình mặc định cho lệnh npm init. Dưới đây là một số lệnh bạn có thể sử dụng để cài đặt các giá trị mặc định này.
Thiết lập địa chỉ email của tác giả
Khi khởi tạo một dự án Node.js bằng npm init, bạn có thể được yêu cầu nhập thông tin tác giả (author) – bao gồm tên và địa chỉ email. Để tiết kiệm thời gian cho những lần khởi tạo sau, npm cho phép bạn đặt giá trị mặc định cho email của tác giả.
Việc này giúp mọi tệp package.json mới tự động điền thông tin chính xác mà không cần nhập lại thủ công. Lệnh sau giúp bạn đặt địa chỉ email mặc định cho dự án:
npm set init.author.email "nhập địa chỉ email của bạn tại đây"
Cài đặt tên tác giả
Tương tự như địa chỉ email, tên tác giả sẽ được hiển thị trong package.json, giúp xác định người phát triển hoặc người chịu trách nhiệm cho gói (package). Để tránh phải nhập lại mỗi lần tạo dự án mới, bạn có thể đặt tên tác giả mặc định bằng lệnh sau.
npm set init.author.name "nhập tên tác giả của bạn tại đây"
Cài đặt giấy phép (license) cho dự án
Trong mỗi tệp package.json, trường license cho biết điều kiện sử dụng, phân phối và chỉnh sửa mã nguồn của dự án. Việc khai báo giấy phép giúp đảm bảo minh bạch pháp lý và khẳng định quyền sở hữu mã nguồn. Thay vì phải nhập thủ công mỗi lần, bạn có thể thiết lập sẵn loại giấy phép mặc định cho tất cả các dự án mới bằng lệnh.
npm set init.license "MIT"
Cách thêm dependencies thủ công vào tệp package.json
Bạn có thể sử dụng thuộc tính dependencies để thêm thủ công các gói phụ thuộc (dependencies) vào tệp package.json bằng bất kỳ trình soạn thảo văn bản nào như Microsoft Visual Studio Code.
{
"name": "hometech",
"version": "1.0.0",
"dependencies": {
"my_dep": "^1.0.0"
}
}
Tương tự, bạn có thể sử dụng thuộc tính devDependencies để thêm các gói dành cho môi trường phát triển (development dependencies) cùng tên và phiên bản của chúng vào package.json:
{
"name": "hometech",
"version": "1.0.0",
"dependencies": {
"my_dep": "^1.0.0"
},
"devDependencies": {
"my_test_framework": "^3.1.0",
"another_dev_dep": "1.0.0 - 1.2.0"
}
}
Các câu hỏi thường gặp về npm init
Cách chạy lệnh npm init trong VS Code như thế nào?
Để chạy npm init trong Visual Studio Code, bạn chỉ cần mở Terminal bằng tổ hợp phím Ctrl + ~ (hoặc vào menu View → Terminal), sau đó di chuyển đến thư mục dự án của bạn và gõ lệnh:
npm init
Tiếp theo, VS Code sẽ hiển thị các câu hỏi để bạn nhập thông tin như tên dự án, phiên bản, mô tả,… Sau khi hoàn tất, tệp package.json sẽ được tạo tự động trong thư mục hiện tại. Nếu muốn khởi tạo nhanh mà không cần trả lời từng câu hỏi, bạn có thể dùng lệnh:
npm init -y
Cách sử dụng npm init như thế nào?
Lệnh npm init được dùng để tạo tệp package.json, đây là tệp cấu hình trung tâm của mọi dự án Node.js. Khi gõ npm init trong terminal, bạn sẽ được hướng dẫn điền các thông tin cơ bản như:
- name: Tên gói hoặc dự án.
- version: Phiên bản hiện tại.
- description: Mô tả ngắn về dự án.
- entry point: Tệp chính (thường là index.js).
- scripts: Các lệnh npm có thể chạy tự động.
Sau khi hoàn thành, npm sẽ tạo ra tệp package.json chứa toàn bộ dữ liệu này. Nếu muốn bỏ qua các bước nhập thông tin, bạn chỉ cần dùng lệnh npm init -y để tạo tệp mặc định nhanh chóng.
npm init trong Windows có hoạt động khác trên macOS, Linux không?
Trên Windows, lệnh npm init có chức năng hoàn toàn giống như trên macOS hoặc Linux. Bạn có thể mở Command Prompt, PowerShell hoặc terminal trong VS Code, di chuyển đến thư mục dự án rồi nhập câu lệnh:
npm init
Sau đó, tiến hành tạo tệp package.json. Nếu bạn muốn bỏ qua phần nhập thủ công, hãy sử dụng câu lệnh:
npm init -y
Cú pháp và kết quả của lệnh này không phụ thuộc vào hệ điều hành, nên bạn có thể yên tâm dùng trên mọi nền tảng hỗ trợ Node.js.
Tổng kết
npm init không chỉ là bước đầu tiên khi bắt đầu dự án Node.js mà còn là nền tảng để đảm bảo cấu trúc dự án khoa học và dễ quản lý. Việc hiểu rõ các tùy chọn và cú pháp của npm init giúp bạn tiết kiệm thời gian, tránh lỗi cấu hình, và tối ưu workflow phát triển. Hy vọng qua bài viết, bạn có thể áp dụng được các mẹo đã được chia sẻ để thiết lập dự án Node.js một cách nhanh chóng, linh hoạt và theo đúng tiêu chuẩn chuyên nghiệp.
Đọc chi tiết: Khi nào nên sử dụng NodeJS lập trình backend?

