Nodejs
开启 import
require("@babel/register")({
babelrc: false,
presets: ["@babel/preset-env"]
});
const {language} = require("./index");
module.exports = language;
//package.json
devDependencies: {
"@babel/core": "^7.14.8",
"@babel/preset-env": "^7.14.8",
"@babel/register": "^7.14.5",
}
批量格式化
const prettier = require("prettier");
const fs = require("fs");
const getPrettierFiles = require("./getPrettierFiles");
const prettierConfigPath = require.resolve("../.prettierrc");//配置文件
const chalk = require("chalk");
let didError = false;
const files = getPrettierFiles();
files.forEach((file) => {
const options = prettier.resolveConfig.sync(file, {
config: prettierConfigPath,
});
const fileInfo = prettier.getFileInfo.sync(file);
if (fileInfo.ignored) {
return;
}
try {
const input = fs.readFileSync(file, "utf8");
const withParserOptions = {
...options,
parser: fileInfo.inferredParser,
};
const output = prettier.format(input, withParserOptions);
if (output !== input) {
fs.writeFileSync(file, output, "utf8");
console.log(chalk.green(`${file} is prettier`));
}
} catch (e) {
didError = true;
}
});
if (didError) {
process.exit(1);
}
console.log(chalk.hex("#1890FF")("prettier success!"));
//===>>
const glob = require("glob");
const getPrettierFiles = () => {
let files = [];
const jsFiles = glob.sync("src/**/*.js*", {
ignore: ["**/node_modules/**", "build/**"],
});
files = [...jsFiles];
if (!files.length) {
return;
}
return files;
};
module.exports = getPrettierFiles;
Node.js 常见面试题
Node.js 是什么?有什么特点?
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,特点有事件驱动、非阻塞 IO、高并发、适合 IO 密集型应用。什么是事件循环(Event Loop)?
事件循环是 Node.js 处理异步回调的机制,保证非阻塞 IO,通过事件队列和回调函数实现高并发。什么是回调函数?如何避免回调地狱?
回调函数是作为参数传递并在异步操作完成后执行的函数。避免回调地狱可以用 Promise、async/await 或模块化拆分。如何实现异步编程?
可以使用回调函数、Promise、async/await。什么是模块?如何导入和导出?
Node.js 使用 CommonJS 模块规范,通过require导入,module.exports导出。Node.js 如何处理异常?
使用 try/catch 捕获同步异常,异步异常通过回调函数的错误参数或process.on('uncaughtException')处理。什么是中间件?在 Express 中如何使用?
中间件是处理请求和响应的函数,可以实现日志、鉴权、解析 body 等功能。Express 用app.use()注册中间件。如何连接和操作 MongoDB?
可以使用 mongoose 或官方 mongodb 驱动,定义 Schema,进行增删改查操作。什么是流(Stream)?有哪些类型?
流是处理大文件或数据的方式,分为 Readable、Writable、Duplex、Transform 四种类型。如何实现文件上传?
可以用 multer、formidable 等中间件处理 multipart/form-data。如何实现 JWT 用户认证?
使用 jsonwebtoken 包生成和验证 token,结合中间件实现鉴权。Node.js 如何实现多进程?
使用 child_process、cluster 模块实现多进程和负载均衡。如何处理跨域问题?
可以用 cors 中间件设置响应头,允许跨域请求。如何实现日志记录?
使用 winston、log4js 等日志库,记录请求、错误等信息。如何优化 Node.js 性能?
合理使用异步、缓存、负载均衡、数据库索引、减少阻塞操作等。