Skip to content
youhoc
  • Pages
    • Home
    • Modern App Guidelines
    • Linux
      • Day 1: Linux Distributions & Navigation
      • Day 2: User Management
      • Day 3: File Permission & Ownership
      • Day 4: Package Management
      • Day 5: Services Management
    • Javascript
      • JS The Weird Part
        • Execution Context
        • Types & Operators
        • Objects & Functions
        • Error Handling & Strict Mode
        • Typescript, ES6, Tra
      • Modern JS
        • JS in the Browser
        • Data Storage JSON
        • Modern JS
        • Advanced Objects & Methods
        • Webpack & Babel
        • Async
      • jQuery
        • In-depth Analysis of jQuery
      • React-ready JS
        • Arrow Function
        • Template Literals
        • Logical AND, OR, Ternary, Nullish Operators
        • Destructuring & Rest Operator
        • Array Method
        • Immutability and Spread Operator
        • Promises, Async/Await, Callback
    • PHP
      • gruntJS
      • composer
      • MySQL
    • Docker
      • Container Basics
      • Container Networking
      • Container Image
      • Container Volume & Persistent Data
      • Dockerfile
      • Docker Compose
      • Docker Registry
    • Node.js
      • 1. Installing & Exploring
      • icon picker
        2. Core Modules
      • 3. Get User Input
      • File System & Input Arguments
      • 5. Express Web Server
      • 6. Deploy to Heroku & Github
      • Authentication
      • 7. Databases
      • 8. Rest API
    • ReactJS
      • React from Andrew
        • Summary from Next
        • 1. Basics
        • 2. React Components
        • 3. Webpack
        • 4. Styling with SCSS
        • 5. React Router
        • 6. React Hook
      • Modern React From The Beginning
        • Intro to JSX
        • Vite Build Tools
        • Basic Component Creation
        • Component State
        • Props & Component Composition
        • useState with Inputs & Form Submission
        • useEffect, useRef & Local Storage
        • Async / Await and Http Request in React
        • React Router: Declarative Mode
        • ContextAPI
        • React Router: Framework Mode
          • File-routing & HTML Layouts
          • Server-side Data Query
          • Links & Navigation
          • Loaders
    • Typescript
      • Type User vs UserProp
    • Payload CMS

2. Core Modules

1. Nếu load những core modules (được list trên Documentation) thì chỉ cần gọi đúng tên khi load

KHUYẾN KHÍCH đặt tên hằng (const) giống tên module (class)
// fs là file system, xem documentation để biết tên module
const fs = require('fs')
fs.writeFileSync('notes.txt','hehe, tao thanh cong mot file moi')

// ghi tiếp nội dung vào 1 file
fs.appendFileSync('notes.txt', '\nday la dong thu 2')

(2.2) Nếu muốn load module ngoài (ở đây tạm hiểu là function) thì cần dùng hàm require (thay vì include như PHP)

các biến trong file được require là local scope, không sử dụng được ở file hiện tại
cung cấp đường dẫn tương đối đến file được require
Trong app.js:
// chỉ include các hàm độc lập, local scope (nếu có trả về giá trị thì cũng ko lưu)
require ('./function.js')

// nếu trong function.js có trả về giá trị (export) thì ghi vào hằng (name)
const name2 = require ('./function.js')

// nếu trong function.js không trả biến thì dòng này sẽ báo lỗi
console.log('name2')

// nếu trong function.js không trả hàm thì dòng này sẽ báo lỗi
const addFunc = require ('./function.js')
const sum = addFunc(2,3)
console.log(sum);
Trong function.js
// hàm này sẽ hiển thị (thực thi) khi require
console.log('Hien thi cai gì do')

// hằng này nếu không export thì chỉ truy cập được trong file này (ko access từ bên ngoài được)
const name = 'Nghi'

// export giá trị giống return value bên PHP
module.exports = name

// hàm này nếu không export thì ko chạy được bên app.js
const add = function (a,b) {
return a + b
}

// export function cho bất cứ file nào require
module.exports = add

(2.3) Nếu muốn load module từ thư viện npm

Đầu tiên phải initialize npm
chạy ở thư mục chứa app / dự án
câu lệnh tạo ra 1 file JSON lưu ở thư mục gốc của dự án, giống như file cấu hình

// đồng ý hết để tạo cấu hình mặc định
npm init

// file package.json được tạo trong thư mục notes-app
{
"name": "notes-app",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Tìm đến thư viện cần cài trên npmjs.com
chạy câu lệnh cài thử validator.js https://www.npmjs.com/package/validator

npm install validator
npm i validator@13.5.2
Sau khi chạy câu lệnh này thì Terminal sẽ làm 3 thứ
Tạo thư mục node_modules chứa tất cả script của thư viện
Tạo file package-lock.json chứa cấu hình của thư viện
Cập nhật package.json thêm giá trị dependencies, tên libs và version

KHÔNG NÊN ĐỤNG ĐẾN CÁC FILES NÀY
Khi xuất code cho đồng nghiệp, gỡ thư mục node_modules, đồng nghiệp có thể tự cài lại các package trong package.json và package-lock.json bằng cách chạy npm install

"dependencies": {
"validator": "^13.5.2"
}
Để bắt đầu sử dụng lib này thì truyền giá trị vào hằng (thường bây giờ là class)
const validator = require('validator')

// kiểm tra thử một biến bất kỳ xem có phải là URL hoặc email

console.log(validator.isEmail('nghi@me.com'))
// return true

console.log(validator.URL('https://brvn.net'))
// return true
Có thể sử dụng cho dự án PHP, sử dụng JS ở client-side
<script type="text/javascript" src="validator.min.js"></script>
<script type="text/javascript">
validator.isEmail('foo@bar.com'); //=> true
</script>
Tổng hợp bài hôm nay trong 1 file

(2.4) Cài đặt global module trên máy chủ, không có dependencies, chạy trực tiếp từ hệ thống

Ví dụ, cài nodemon để không cần phải chạy lại app.js mỗi lần sửa code. Nodemon sẽ tự restart script khi tháy có thay đổi code.
Lưu ý:
Khi cài global module, thêm hậu tố -g
Do liên quan đến hệ thống (cài trên máy chủ), nếu báo lỗi thì thêm sudo (quyền admin)

npm install nodemon -g
sudo npm install nodemon -g
Chạy quài 1 file app.js cho đến khi exit
nodemon app.js
Cách tạo function

Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.