找不到 bundle.js

Posted

技术标签:

【中文标题】找不到 bundle.js【英文标题】:Can't find bundle.js 【发布时间】:2016-12-27 05:40:45 【问题描述】:

我知道以前有人问过这个问题,但老实说,我在任何地方都找不到答案——看起来好像我正在做我应该做的一切,但没有创建捆绑包。所以我有这个webpack.config.js 文件,它应该处理 HMR + React 和 typescript(使用 tsx 语法),但它没有创建包。编译时不会抛出任何错误,并且似乎做得很好,但是当我尝试获取它时,捆绑包返回 404。这是我的文件结构:

someApp/
  src/
    index.tsx
    components/
      Hello.tsx
  dist/
  webpack.config.js
  ...

这是我的 webpack 配置:

var path = require('path')
var webpack = require('webpack')

module.exports = 
    entry: [
        'webpack-dev-server/client?http://localhost:3000',
        'webpack/hot/only-dev-server',
        './src/index.tsx'
    ],
    output: 
        path: path.join(__dirname, '/dist'),
        filename: 'bundle.js',
        publicPath: '/public/'
    ,

    plugins: [
        new webpack.HotModuleReplacementPlugin()
    ],

    devtool: 'eval',

    resolve: 
        extensions: ['', '.webpack.js', '.web.js', '.ts', '.tsx', '.js']
    ,

    module: 
        loaders: [
            
                test: /\.tsx?$/,
                loaders: [
          'react-hot-loader',
          'ts-loader'
        ],
        include: path.join(__dirname, '/src')
            
        ],

        preLoaders: [
             test: /\.js$/, loader: 'source-map-loader' 
        ]
    ,
    externals: 
        'react': 'React',
        'react-dom': 'ReactDOM'
    ,
;

另一个奇怪的事情是,我认为它可能与通过节点执行它有关,因为当我自己运行 webpack 时,它会编译捆绑包。这是我启动服务器的代码:

var webpack = require('webpack');
var WebpackDevServer = require('webpack-dev-server');
var config = require('./webpack.config');

new WebpackDevServer(webpack(config), 
  publicPath: config.output.publicPath,
  hot: true,
  historyApiFallback: true
).listen(3000, 'localhost', function (err, result) 
  if (err) 
    return console.log(err)
  

  console.log('Listening at http://localhost:3000/')

)

也许我遗漏了一些东西,但我对 webpack 还很陌生,所以任何帮助都会很棒!

【问题讨论】:

【参考方案1】:

我认为您需要将输出更改为:

output: 
    path: path.join(__dirname, '/dist'), // <- change last argument
    filename: 'bundle.js',
    publicPath: '/public/'
,

【讨论】:

你是个野兽,谢谢老兄!这太完美了,我总是忘记 path.join 必须有前缀 / 啊等等,很抱歉,我想我的 dist 文件夹中有一个陈旧的包。我认为你是对的,这也是一个问题,但遗憾的是它没有解决我在请求 localhost:3000/dist/bundle.js 时得到的 404@ 我也总是将入口点作为一个数组: entry: [ './src/index.tsx' ], 是的,我也有我的数组。虽然我两种方式都做过,而且它们在过去都有效 你说得对,没关系。您可能想尝试的另一件事是将路径添加到此: include: path.join(__dirname, '/src')【参考方案2】:

那是因为 webpack-dev-server 从内存中提供 bundle.js。这样做是为了让 bundle.js 服务更快。你可以为生产添加另一个 webpack 配置,将 bundle.js 输出到磁盘

module.exports = 
    entry: './src/index.tsx',
    output: 
        path: path.join(__dirname, 'dist'),
        filename: 'bundle.js',
        publicPath: '/public/'
    ,
.
.
.

以及所有其他模块,只是不要包含您的开发服务器

如果你想像 localhost:3000//..../bundle.js 那样获取 bundle.js

试试这个

var path = require('path')
var webpack = require('webpack')

module.exports = 
    entry:'./src/index.tsx',
    output: 
        path: path.join(__dirname, 'dist'),
        filename: 'bundle.js',
        publicPath: '/public/'
    ,

    //plugins: [
      //  new webpack.HotModuleReplacementPlugin()
    //],

    devtool: 'eval',

    resolve: 
        extensions: ['', '.webpack.js', '.web.js', '.ts', '.tsx', '.js']
    ,

    module: 
        loaders: [
            
                test: /\.tsx?$/,
                loaders: [
          'react-hot-loader',
          'ts-loader'
        ],
        include: path.join(__dirname, 'src')
            
        ],

        preLoaders: [
             test: /\.js$/, loader: 'source-map-loader' 
        ]
    ,
    externals: 
        'react': 'React',
        'react-dom': 'ReactDOM'
    ,
;

编辑:如果你想获取 bundle.js

您必须使用 publicPath 中定义的内容:'/public/'。所以对你来说,你可以从中获取 bundle.js 的 url 是 localhost:3000/public/bundle.js

【讨论】:

谢谢大卫!虽然它从磁盘提供服务非常棒,但捆绑文件无法从localhost:3000/dist/bundle.js 获得。您是否从我的配置文件中看到了这种情况的任何原因?也许我只是对我应该从哪个路径请求该捆绑包感到困惑 你没有做错任何事,但是 webpack-dev-server 从内存中提供 bundle.js,我认为没有办法改变它,你可以做的是添加另一个 webpack。输出到磁盘的 config.js 文件,如果你不包含 'webpack-dev-server/client?localhost:3000', 'webpack/hot/only-dev-server',它将输出到磁盘 感谢您解释大卫!我想你误解了我,虽然我知道开发服务器从内存中提供 bundle.js,但我不应该能够请求 localhost:3000/dist/bundle.js 并接收它吗?我知道它不会在 dist 文件夹中,因为它不会写入磁盘,但我应该可以请求它,不是吗? 另外,我尝试删除引用 webpack dev server 和 hot reload only dev server 的那两行,通过我的节点脚本运行时它仍然没有写入磁盘 localhost:3000/dist/bundle.js 你不能像那样从内存中获取 bundle.js,但是看看我的代码,我刚刚发布的工作

以上是关于找不到 bundle.js的主要内容,如果未能解决你的问题,请参考以下文章

React Webpack 错误“找不到模块:错误:无法解析 'public/bundle.js' in..”/“字段 'browser' 不包含有效的别名配置”

webpack 4:找不到捆绑js

Webpack 4:找不到Entry模块中的ERROR:错误:无法解析'./src'

未捕获的错误:找不到模块“react/jsx-runtime”

bundle is not defined 手动搭建项目架构

找不到localhostweb页面