为什么webpack配置必须使用path.resolve& path.join

时间:2018-01-20 08:54:37

标签: javascript node.js webpack

在webpack配置中常见的是,当我们需要设置路径时,经常会使用 path.resolve path.join ,我只是想弄清楚为什么我们必须使用它们而不是普通的字符串路径,例如的 '../dist'

我部分理解可能出于某种目的,它们用于返回绝对路径,但我认为普通的字符串路径也可以起作用。

e.g

output: {
filename: '[name].js',
path: path.resolve(__dirname, '../dist'),
chunkFilename: 'js/[name].[chunkhash].js'
}

1 个答案:

答案 0 :(得分:7)

这与webpack无关,只与Node.js处理路径的方式有关。路径不是相对于文件路径解析的,而是默认相对于工作目录。假设我们有以下目录结构:

project
 ├── a
 |   └── 1.js
 └── b
     └── 2.txt

包含以下内容的1.js:

const filePath = '../b/2.txt';
const content = require('fs').readFileSync(filePath);
console.log(content.toString());

然后,如果我们运行

cd a
node 1.js
一切正常。

但是,如果我们从顶层目录执行,则执行以下操作:

node a/1.js

我们收到错误:

Error: ENOENT: no such file or directory, open 'C:\Users\baryl\Desktop\b\2.txt'

因为现在相对于project而不是project/a解析了路径。 path.resolve解决了这个问题。

const path = require('path');
const filePath = path.resolve(__dirname, '../b/2.txt');
const content = require('fs').readFileSync(filePath);
console.log(content.toString());

现在我们可以安全地从项目目录中执行node a/1.js,它将按预期工作。