当我开始使用 express 时,我一直想要一个使用 import 而不是 require 的解决方案
const express = require("express");
// to
import express from "express"
很多时候都经过这条线:-Unfortunately, Node.js doesn't support ES6's import yet.
现在为了帮助其他人,我在这里创建了两个新的解决方案
1) esm:-
非常简单、无 babel、无捆绑的 ECMAScript 模块加载器。
让我们让它工作
yarn add esm / npm install esm
创建 start.js 或使用你的命名空间
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
更改package.josn 的start.js 传递路径
"scripts": {
"start": "node start.js",
"start:dev": "nodemon start.js",
},
"dependencies": {
+ "esm": "^3.2.25",
},
"devDependencies": {
+ "nodemon": "^1.19.2"
}
2) Babel js:-
这可以分为两部分
a) Solution 1 感谢 timonweb.com
b) 解决方案 2
使用Babel 6(旧版babel-preset-stage-3 ^6.0)
在您的根文件夹中创建.babelrc 文件
{
"presets": ["env", "stage-3"]
}
安装 babel-preset-stage-3
yarn add babel-cli babel-polyfill babel-preset-env bable-preset-stage-3 nodemon --dev
package.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"
},
启动你的服务器
yarn start / npm start
哦,不,我们创建了新问题
regeneratorRuntime.mark(function _callee(email, password) {
^
ReferenceError: regeneratorRuntime is not defined
仅当您在代码中使用 async/await 时才会出现此错误。
然后使用包含自定义再生器运行时和 core-js 的 polyfill。
在index.js 上添加
import "babel-polyfill"
这允许你使用 async/await
使用Babel 7
需要更新项目中的所有内容
让我们从 babel 7 开始
.babelrc
{
"presets": ["@babel/preset-env"]
}
package.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"
....
}
并在起点使用import "@babel/polyfill"
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!'))
你在想为什么start:dev
说真的。如果你是新手,这是个好问题。每次更改您都对启动服务器很感兴趣
然后使用yarn start:dev作为开发服务器每次更改都会自动重启服务器以获取更多关于nodemon的信息