当前位置:网站首页>Typescript incremental compilation
Typescript incremental compilation
2022-07-06 23:56:00 【User 6256742】
We are using Node.js When developing the server, we usually use TypeScript To develop large projects , But use ts-node When doing full compilation, we often encounter the problem of slow compilation speed , It usually takes two minutes to modify a line of code and compile . At this time, we need to use incremental compilation to optimize the compilation speed , And other files are fully compiled at the start of the project , Which has been modified during development TS The file is compiled into the corresponding JS file .
development environment
1. modify tscon.json file
{
"compilerOptions": {
"watch": true
}
}stay ts Open in configuration watch monitor rootDir All under the path ts file ( There will be me at the end of the article tsconfig.json)
2. Programming
To write dev.js As the project development startup document , encapsulation Node.js Bring your own method to move the folder to copy, such as public Folder 、.env file , start-up tsc Incremental compilation , monitor tsc The operation results will be used after the first successful operation shell To run the compiled dist Folder
Whole demo I will put at the bottom of the article gitee link .
const fs = require('fs');
const path = require('path');
const clearDir = require('./modules/clearDir');// Delete the entire folder
const copyDir = require('./modules/copyDir');// Copy folder
const countFile = require('./modules/countFile');// Calculate the number of files in the folder
clearDir('dist'); // Empty dist
fs.mkdirSync('dist') // establish dist
copyDir('public', 'dist/public'); // Copy public
fs.writeFileSync('dist/.env.development', fs.readFileSync('.env.development').toString()) // Copy the environment variable file
// Start execution tsc
const shell = require('shelljs');
const tsCount = countFile(path.join(__dirname, '../src')) // obtain ts Real time comparison of the number of files JS
const _tsc = shell.exec('tsc', {
async: true
});
// Real time comparison TS and JS The number of
new Promise((resolve, reject) => {
_tsc.stdout.on('data', function (data) {
let src = path.join(__dirname, '../dist/src');
if (fs.existsSync(src)) {
let timer = setInterval(() => {
let jsCount = countFile('./dist/src')
if (jsCount == tsCount) {
clearInterval(timer)
resolve()
}
}, 50);
}
});
}).then(() => {
shell.exec('cross-env ENV=development nodemon --watch ./dist ./dist/src/index.js', {
async: true
});
})I did it here dist Folder emptying and public Copy of folder , And the migration of environment variable files
The whole idea :
Initialize the required static folder , Start tsc Operation of , At the same time, listen for ts Number of documents and dist Medium js Whether the number of documents has been , Always explain tsc The first compilation is over . stay src After all folders are packaged, start using nodemon function dist Folder , In this way, you only need to run the corresponding js That's all right. , It greatly accelerates the hot update speed .
Many students are using it ts Developed using ts path alias , Used module-alias Plug in to solve , however dist Next package.json Additional modifications are required , Specific in node.js You can refer to this article for the use of path aliases in TypeScript Use type aliases in
pack
const fs = require('fs');
const shell = require('shelljs');
const path = require('path');
const clearDir = require('./modules/clearDir')
const copyDir = require('./modules/copyDir');
const countFile = require('./modules/countFile');
clearDir('dist'); // Empty dist
fs.mkdirSync('dist')
const _tsc = shell.exec('tsc', {
async: true
});
copyDir('public', 'dist/public'); // Copy public
fs.writeFileSync('dist/package.json', fs.readFileSync('package.json').toString())
fs.writeFileSync('dist/yarn.lock', fs.readFileSync('yarn.lock').toString())
fs.writeFileSync('dist/.env.production', fs.readFileSync('.env.production').toString())
const tsCount = countFile(path.join(__dirname, '../src')) // obtain ts Real time comparison of the number of files JS
new Promise((resolve, reject) => {
_tsc.stdout.on('data', function (data) {
let src = path.join(__dirname, '../dist/src');
if (fs.existsSync(src)) {
let timer = setInterval(() => {
let jsCount = countFile('./dist/src');
if (jsCount == tsCount) {
clearInterval(timer)
resolve()
}
}, 50);
}
});
}).then(() => {
console.log(` Packing is done ,SRC Lower total ${tsCount} File `);
shell.exit(1)
})The principle is similar to development , It's just that the folders moved are different , And in tsc After that, you can exit directly
One Koa+TypeScript The template of ,ORM Use Sequelize,TS Added incremental compilation and type aliases ,Koa It is also basically debugged , Auto import Router And configuring static files
Basically Koa+TS Download is used , The run command is in Readme.md in
git clone https://gitee.com/awebcoder/koa-ts.gittsconfig.json
{
"compilerOptions": {
"experimentalDecorators": true,
"target": "ES2015",
"module": "commonjs",
"outDir": "./dist",
"rootDir": "./",
"moduleResolution": "node",
// Variables and function parameters do not use warnings
// "noUnusedLocals": true,
// "noUnusedParameters": true,
"removeComments": true, // uncomment
"strict": true,
"baseUrl": "./",
"paths": {
"@/*": ["src/*"]
},
"skipLibCheck": true,
"esModuleInterop": true,
"noImplicitAny": true, // Implicit is not allowed any type
"watch": true
},
"include": ["src"],
"exclude": ["node_modules", "**/*.d.ts"]
}边栏推荐
- [212] what are three methods for PHP to send post requests
- DAY SIX
- Do you still have to rely on Simba to shout for a new business that is Kwai?
- 【2022全网最细】接口测试一般怎么测?接口测试的流程和步骤
- Interface joint debugging test script optimization v4.0
- PostgreSQL使用Pgpool-II实现读写分离+负载均衡
- Computer reinstallation system teaching, one click fool operation, 80% of people have learned
- 华为mate8电池价格_华为mate8换电池后充电巨慢
- 数据运营平台-数据采集[通俗易懂]
- Basic chart interpretation of "Oriental selection" hot out of circle data
猜你喜欢

Gold three silver four, don't change jobs

DAY ONE

Experiment 4: installing packages from Gui

DAY SIX

Server SMP, NUMA, MPP system learning notes.

17、 MySQL - high availability + read / write separation + gtid + semi synchronous master-slave replication cluster

服务器SMP、NUMA、MPP体系学习笔记。

MATLIB reads data from excel table and draws function image

【OFDM通信】基于深度学习的OFDM系统信号检测附matlab代码

Zero code and high return. How to use 40 sets of templates to meet 95% of the reporting needs in the work
随机推荐
快手的新生意,还得靠辛巴吆喝?
[communication] optimal power allocation in the uplink of two-layer wireless femtocell network with matlab code
Asset security issues or constraints on the development of the encryption industry, risk control + compliance has become the key to breaking the platform
GPIO簡介
How to find out if the U disk file of the computer reinstallation system is hidden
DAY TWO
DAY THREE
app通用功能測試用例
Every year, 200 billion yuan is invested in the chip field, and "China chip" venture capital is booming
在docker中快速使用各个版本的PostgreSQL数据库
(LeetCode)两数之和
三句话简要介绍子网掩码
Yaduo Sangu IPO
PostgreSQL使用Pgpool-II实现读写分离+负载均衡
华为mate8电池价格_华为mate8换电池后充电巨慢
DevOps可以帮助减少技术债务的十种方式
Cas d'essai fonctionnel universel de l'application
Use package FY in Oracle_ Recover_ Data. PCK to recover the table of truncate misoperation
编译logisim
Unity 颜色板|调色板|无级变色功能