艾斯林特今天让我反思自己。 我正在构建一个简单的Express应用程序,因为我正在导入app.ts
文件中的DevDependencies(是的,我使用的是Typescript),所以它很吵。 基本上,我希望我的应用程序只在开发时使用npm包dotenv
和morgan
。 在生产中,我将不需要这两个包中的任何一个。 那么在我的项目中包含这些内容的正确方式是什么呢?
下面是我当前的设置:
基本app.ts
文件:
import express from 'express';
import morgan from 'morgan';
import dotenv from 'dotenv';
import helmet from 'helmet';
import compression from 'compression';
import cookieParser from 'cookie-parser';
import https from 'https';
import path from 'path';
import fs from 'fs';
import logger, { stream } from './util/logger';
/**
* Express Application Class
*/
class App {
public app: express.Application;
public port: number;
constructor(port: number) {
this.app = express();
this.port = port;
this.registerMiddleware();
}
/**
* Registers middleware for use
*/
private registerMiddleware(): void {
/** Use dotenv for development env variables */
if (process.env.NODE_ENV !== 'production') {
dotenv.config();
this.app.use(morgan('dev', { stream }));
}
this.app.use(helmet());
this.app.use(compression());
this.app.use(express.json());
this.app.use(express.urlencoded({ extended: false }));
this.app.use(cookieParser());
}
/**
* Starts the Express.js server.
*/
public start(): void {
this.app.listen(this.port, () => {
logger.info(`Server started at https://localhost:${this.port}`);
});
}
/**
* Starts the secure Express.js server.
*/
public startDev(): void {
/** Start a secure Express server for local testing */
https
.createServer(
{
key: fs.readFileSync(path.resolve('server.key')),
cert: fs.readFileSync(path.resolve('server.crt')),
},
this.app
)
.listen(3000, () => {
logger.info(`Secure server started at https://localhost:${this.port}`);
});
}
}
export default App;
基本server.ts
文件:
import App from './app';
/**
* Init Express.js server.
*/
const server = new App(3000);
/**
* Start Express.js server.
*/
if (process.env.NODE_ENV !== 'production') {
server.startDev();
} else {
server.start();
}
您可以将它们保存为除开发依赖项之外的可选依赖项,使用
npm install dotenv morgan --save-optional
参考