process.cwd()与__dirname

在项目中经常看到process.cwd(),他和__dirname有什么区别呢?
这是在网络上经常能搜到的答案,但是有种什么都说了但是又什么都没说的感觉。
process.cwd() 是当前Node.js进程执行时的文件夹地址——工作目录,保证了文件在不同的目录下执行时,路径始终不变
__dirname 是被执行的js 文件的地址 ——文件所在目录

详细展示描述一下:
__dirname 是被执行的js 文件的地址 ——文件所在目录

__dirname: 当前模块的目录名。 等同于 __filename 的 path.dirname()。__dirname 实际上不是一个全局变量,而是每个模块内部的。
在这里插入图片描述

当我们不同的目录下面打印__dirname的时候,结果也是不同的,这也是他跟process.cwd()最大的区别。

process.cwd() 是当前Node.js进程执行时的文件夹地址

简单说就是执行命令====== node 文件地址(命令行)
的时候的文件夹地址,如 node file.js,则这个时候process.cwd()就是file.js文件所在的目录地址.

但是为什么说process.cwd()保证了文件在不同的目录下执行时,路径始终不变??
这其实跟vue、react等项目的启动打包原理相关,即跟npm run dev/serve/start…的原理相关。

当我们执行启动或打包命令时,如npm run start,脚手架就会到项目的根目录下寻找一个叫:package.json 的文件。
在这里插入图片描述
我们可以看到start对应的命令为node scripts/start.js,然后就会开始执行这个命令,那么package.json所在目录就是process.cwd()的结果。因为这个文件基本不会动,就在项目根目录/下,所以我们在全局使用的时候这个地址也不会变。

/* eslint-disable @typescript-eslint/no-var-requires */ const path = require("path"); const webpack = require("webpack"); // fork-ts-checker-webpack-plugin需要单独安装 const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); module.exports = { entry: "./src/main", target: "node", // 置为空即可忽略webpack-node-externals插件 externals: {}, // ts文件的处理 module: { rules: [ { test: /\.ts?$/, use: { loader: "ts-loader", options: { transpileOnly: true } }, exclude: /node_modules/ }, { test: /\.node$/, loader: "node-loader", } ] }, // 打包后的文件名称以及位置 output: { filename: "main.js", path: path.resolve(__dirname, "dist") }, resolve: { extensions: [".js", ".ts", ".json"], alias: { '@common': path.resolve(__dirname, 'src', 'common'), '@config': path.resolve(__dirname, 'src', 'config'), '@projects': path.resolve(__dirname, 'src', 'projects'), '@model': path.resolve(__dirname, 'src', 'model'), '@data': path.resolve(__dirname, 'src', 'data'), '@utils': path.resolve(__dirname, 'src', 'utils'), }, // fallback:{ // crypto: require.resolve("crypto-browserify"), // stream: require.resolve("stream-browserify"), // } }, plugins: [ // 需要进行忽略的插件 new webpack.IgnorePlugin({ checkResource(resource) { const lazyImports = [ "@nestjs/microservices", "@nestjs/microservices/microservices-module", "@nestjs/websockets/socket-module", "cache-manager", "class-validator", "class-transformer", "class-transformer/storage" ]; if (!lazyImports.includes(resource)) { return false; } try { require.resolve(resource, { paths: [process.cwd()] }); } catch (err) { return true; } return false; } }), new ForkTsCheckerWebpackPlugin() ] };
06-13
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值