最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Webpack节点process.cwd()和path.resolve()返回''

网站源码admin21浏览0评论

Webpack节点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返回似乎很合理。

发布评论

评论列表(0)

  1. 暂无评论