节点process.cwd()和path.resolve()返回'/'"/>
Webpack节点process.cwd()和path.resolve()返回'/'
几乎是标题,不确定我配置错误...我看过的其他解决方案建议添加target: node
,但我正在使用webpack捆绑反应,因此我的目标不应为nodejs,对吗?
Webpack配置:
const path = require('path');
require('dotenv').config();
const mode = process.env.NODE_ENV;
console.log(mode);
module.exports = {
entry: ['react-hot-loader/patch', path.resolve(__dirname, 'src')],
output: {
path: path.resolve(__dirname, '/public'),
publicPath: '/public/js/',
filename: 'bundle.js',
},
mode,
module: {
rules: [
{
enforce: 'pre',
test: /\.(js|jsx)$/,
loader: [{ loader: 'eslint-loader' }],
},
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
loader: [
{
loader: 'babel-loader',
query: { presets: ['@babel/preset-react'] },
},
],
},
],
},
resolve: {
alias: { 'react-dom': '@hot-loader/react-dom' },
modules: ['src', 'node_modules'],
extensions: ['*', '.js', '.jsx'],
},
devtool: 'source-map',
devServer: {
historyApiFallback: true,
hot: true,
contentBase: './public',
compress: true,
},
node: { __dirname: true, __filename: true },
console.log(__filename); // returns src/components/Play/components/Lobby.jsx
console.log(__dirname); // returns src/components/Play/components
console.log(process.cwd()); // returns /
console.log(path.resolve()); // returns /
添加更多文本以发布此内容。已添加更多详细信息以发布此内容。很抱歉,我不确定我能对我遇到的这个问题做更多的描述...
回答如下:由于已配置node: { __dirname: true, __filename: true }
,因此在打包(__dirname
)时,webpack将替换__filename
和see docs。这就是为什么您在代码运行时看到期望从console.log(__dirname)
获得的值的原因。请记住,捆绑后目录src/components/Play/components/
实际上并不存在-您的所有代码都在单个bundle.js
文件中。
关于process.cwd()
,当您的代码在Web浏览器中运行时,您希望获得当前工作目录的什么?在浏览器中运行的代码无法访问编写代码的文件系统,因此,将/
作为cwd返回似乎很合理。
更多推荐
Webpack节点process.cwd()和path.resolve()返回'/'
发布评论