Khi tôi bắt đầu với express luôn muốn có một giải pháp để sử dụng nhập thay vì yêu cầu
const express = require("express");
// to
import express from "express"
Nhiều lần đi qua dòng này: - Unfortunately, Node.js doesn't support ES6's import yet.
Bây giờ để giúp đỡ khác, tôi tạo hai giải pháp mới ở đây
1) esm : -
Trình tải mô-đun ECMAScript đơn giản, không có babel, không có gói. hãy làm cho nó hoạt động
yarn add esm / npm install esm
tạo start.js hoặc sử dụng không gian tên của bạn
require = require("esm")(module/*, options*/)
// Import the rest of our application.
module.exports = require('./src/server.js')
// where server.js is express server start file
Thay đổi package.josn
đường dẫn của bạnstart.js
"scripts": {
"start": "node start.js",
"start:dev": "nodemon start.js",
},
"dependencies": {
+ "esm": "^3.2.25",
},
"devDependencies": {
+ "nodemon": "^1.19.2"
}
2) Babel js : -
Điều này có thể được chia thành 2 phần
a) Giải pháp 1 nhờ timonweb.com
b) Giải pháp 2
sử dụng Babel 6 (phiên bản cũ hơn của babel-preset-giai đoạn-3 ^ 6.0 ) tạo .babelrc
tệp tại thư mục gốc của bạn
{
"presets": ["env", "stage-3"]
}
Cài đặt babel-preset-giai đoạn 3
yarn add babel-cli babel-polyfill babel-preset-env bable-preset-stage-3 nodemon --dev
Thay đổi trong gói.json
"scripts": {
+ "start:dev": "nodemon --exec babel-node -- ./src/index.js",
+ "start": "npm run build && node ./build/index.js",
+ "build": "npm run clean && babel src -d build -s --source-maps --copy-files",
+ "clean": "rm -rf build && mkdir build"
},
"devDependencies": {
+ "babel-cli": "^6.26.0",
+ "babel-polyfill": "^6.26.0",
+ "babel-preset-env": "^1.7.0",
+ "babel-preset-stage-3": "^6.24.1",
+ "nodemon": "^1.19.4"
},
Bắt đầu máy chủ của bạn
yarn start / npm start
Ôi không, chúng tôi tạo ra vấn đề mới
regeneratorRuntime.mark(function _callee(email, password) {
^
ReferenceError: regeneratorRuntime is not defined
Lỗi này chỉ xuất hiện khi bạn sử dụng async / await trong mã của mình. Sau đó sử dụng polyfill bao gồm thời gian chạy bộ tái tạo tùy chỉnh và core-js. thêm vào đầuindex.js
import "babel-polyfill"
Điều này cho phép bạn sử dụng async / await
sử dụng Babel 7
Cần cập nhật mọi thứ trong dự án của bạn, hãy bắt đầu với babel 7 .babelrc
{
"presets": ["@babel/preset-env"]
}
Một số thay đổi trong gói.json
"scripts": {
+ "start:dev": "nodemon --exec babel-node -- ./src/index.js",
+ "start": "npm run build && node ./build/index.js",
+ "build": "npm run clean && babel src -d build -s --source-maps --copy-files",
+ "clean": "rm -rf build && mkdir build",
....
}
"devDependencies": {
+ "@babel/cli": "^7.0.0",
+ "@babel/core": "^7.6.4",
+ "@babel/node": "^7.0.0",
+ "@babel/polyfill": "^7.0.0",
+ "@babel/preset-env": "^7.0.0",
+ "nodemon": "^1.19.4"
....
}
và sử dụng import "@babel/polyfill"
trên điểm bắt đầu
import "@babel/polyfill"
import express from 'express'
const app = express()
//GET request
app.get('/', async (req, res) {
// await operation
res.send('hello world')
})
app.listen(4000, () => console.log('🚀 Server listening on port 400!'))
Bạn đang nghĩ tại sao start:dev
Nghiêm túc. Đó là câu hỏi tốt nếu bạn là người mới. Mỗi thay đổi bạn đều sử dụng yarn start:dev
máy chủ khởi động mỗi lần, sau đó sử dụng làm máy chủ phát triển, mọi thay đổi sẽ tự động khởi động lại máy chủ để biết thêm về gật đầu