github: git@github.com:spcBackToLife/node-webpack4-ts-demo.git
这篇文章主要是帮助大家去集成Webpack4+node+typescript+hotReload
的环境,而不需要自己再去各种查资料。
- webpack4 + typescripts
- node environment
- nodemon for hot relaod node files
你可以根据以下步骤自己搭建这样的环境,或者是从文章上面的github地址,下载使用这个demo。
mkdir node-webpack4-ts-demo
cd node-webpack4-ts-demo && npm init # 全部默认,按回车即可
会生成一个 package.json
文件.
然后你可以创建scr目录并创建main.ts: src/main.ts
.
- 添加依赖
yarn add typescript -D @types/node -D # to recognize the `require`
- 项目根目录下添加ts配置文件: tsconfig.json, 此处默认了一些基础配置,大家可以根据自己需要去看ts文档进行自己需求的配置。
{
"compilerOptions": {
"strictNullChecks": true,
"module": "commonjs",
"esModuleInterop": true,
"importHelpers": true,
"allowSyntheticDefaultImports": true,
"target": "es5",
"lib": [
"es2015"
]
},
"include": [
"src" // write ts in src, you can define your own dir
]
}
- 添加
webpack
依赖
yarn add webpack webpack-cli babel-loader awesome-typescript-loader source-map-loader -D
创建 webpack.config.js
const path = require('path');
module.exports = {
mode: 'development',
// change to .tsx if necessary
entry: './src/main.ts',
target: 'node',
output: {
filename: './dist/main.js',
path: path.join(__dirname, '')
},
resolve: {
// changed from extensions: [".js", ".jsx"]
extensions: [".ts", ".tsx", ".js", ".jsx"]
},
module: {
rules: [
{
test: /\.ts(x?)$/, use: [
{
loader: 'babel-loader'
},
{
loader: 'awesome-typescript-loader'
}
]
},
// addition - add source-map support
{ enforce: "pre", test: /\.js$/, loader: "source-map-loader" }
]
},
node: {
__dirname: false, // handle node dirname filename error after pack
__filename: false
},
// addition - add source-map support
devtool: "source-map"
}
- 添加依赖
yarn add @babel/core @babel/plugin-syntax-dynamic-import @babel/plugin-transform-runtime @babel/preset-env -D
- 创建
.babelrc
文件
{
"presets": [
[
"@babel/preset-env",
{
"useBuiltIns": "entry"
}
]
],
"plugins": [
"@babel/plugin-syntax-dynamic-import",
"@babel/plugin-transform-runtime"
]
}
- 添加依赖
yarn add nodemon ts-node -D
- 运行
node
(1)nodemon
运行的时候,可以监控指定的文件夹下的ts,如果有变化,会自动重新运行node。 (2)ts-node
可以直接运行ts文件,但没有监控文件变化与重启。
使用nodemon
需要创建配置文件:nodemon.json
, 其中watch
就是需要监控变化的文件夹,本质上流程是:
启动了nodemon
,建立了如下配置中对src
的监控,然后运行yarn dev
,通过ts-node
运行ts。
{
"ignore": ["**/*.test.ts", "**/*.spec.ts", ".git", "node_modules"],
"watch": ["src"],
"exec": "yarn dev",
"ext": "ts"
}
添加运行命令到 package.json
# `webpack` the js with entry main.ts and user `nodemon` run the packed js
# use `nodemon` instead of `node` for hot reloading.
{
...
"hot-dev": "nodemon",
"dev": "ts-node ./src/main.ts"
...
}
运行:yarn hot-dev
则会监控被监控的ts文件自动重新运行。
运行: yarn dev
则只会运行ts文件,改动后不会自己重新运行。
如果你想运行打包后的js,则添加如下命令到package.json
:
{
...
"build-dev": "webpack --config webpack.config.dev.js",
"start-dev": "yarn build-dev && node ./dist/main.js",
...
}
然后 yarn start-dev
最后我们用express
试一下nodemon
的重启功能, 首先在main.ts
写入:
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello world!');
});
app.listen(3000);
添加Express依赖:yarn add express
。
运行: yarn hot-dev
访问:http://localhost:3000
, 页面上呈现 Hello world!
修改 Hello world!
为Hello world, 秋泽雨!
再访问:http://localhost:3000
, 页面上呈现 Hello world, 秋泽雨!
热更新成功!
github: git@github.com:spcBackToLife/node-webpack4-ts-demo.git