You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Webpack打包后.data文件无法访问的离线扫码工具问题排查

问题:离线扫描器依赖的.data文件无法访问

我尝试离线使用一款仪表与二维码扫描器,它依赖10个文件:2个.js文件、2个.gz文件和6个.data文件。我已在webpack.config.js中配置复制anylinejs文件夹:

{ from: 'anylinejs', to: 'anylinejs' }

编译项目时,GenerateSW日志显示service-worker.js将预缓存41个URL(此前为31个),说明相关文件已被识别。dist目录及生成的service-worker.js中均存在这些文件,但网络请求时,.gz和.js文件可正常访问,所有.data文件都无法访问。

完整的webpack.config.js配置

const path = require('path');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const { GenerateSW } = require('workbox-webpack-plugin');
const CopyPlugin = require('copy-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');

// Webpack has the task to copy everything to dist folder where the whole application lands


module.exports = (env) => ({
  cache: false,
  plugins: [new MiniCssExtractPlugin(), new CopyPlugin({
    patterns: [
      { from: "assets", to: "assets/[path]/[name][ext]", },
      { from: "manifest.json" },
      { from: "favicon.ico" },
      { from: "node_modules/qr-scanner/qr-scanner-worker.min.js" },
      { from: './jquery-3.7.0.min.js' },
      { from: './select2.min.js' },
      { from: './select2.min.css' },
      { from: 'anylinejs', to: 'anylinejs' }
    ],
  }),
  new HtmlWebpackPlugin({
    template: 'index.html'
  }),
  env.dev ? undefined : new GenerateSW({
    navigateFallback: 'index.html',
    maximumFileSizeToCacheInBytes: 4 * 1024 * 1024 * 1024
  })].filter(v => !!v),
  entry: './src/site.ts',
  module: {
    rules: [

      {
        test: /\.data/,
        use: 'raw-loader'
      },
      {
        test: /\.data?$/,
        use: 'file-loader'
      },


      {
        test: /\.tsx?$/,
        use: 'ts-loader',
        exclude: /node_modules/,
      },
      {
        test: /\.html$/,
        use: 'raw-loader',
        exclude: /node_modules/,
      },
      {
        test: /\.css$/i,
        use: [MiniCssExtractPlugin.loader, "css-loader"],
      }
    ],
  },
   resolve: {
     extensions: ['.tsx', '.ts', '.js'],
     fallback: {
       crypto: require.resolve('crypto-browserify')
     },
   },
   output: {
      filename: 'bundle.js',
      path: path.resolve(__dirname, 'dist'),
      },

    });

已尝试的解决方案(均无效)

  • 更换raw-loader、url-loader、wasm-loader、file-loader等多种loader
  • 在CopyPlugin的patterns中指定具体文件路径而非文件夹
  • 重新构建、清理缓存、注销service worker
  • 尝试配置NPM file-loader
  • 将anylinejs文件夹移入assets目录
  • 在resolve.extensions中添加.data后缀
  • 配置以下loader:
    {
        test: /\.(data)$/i,
        dependency: { not: ['url'] },
        use: [{
          loader: 'url-loader',
          options: { limit: 8192, }
        }]
      },
    
    以及:
    {
        test: /\.data$/,
        loader: 'raw-loader',
        options: {
          name: '[name].[ext]',
          outputPath: 'anylinejs/'
        }
      },
    

内容的提问来源于stack exchange,提问作者N.Nagl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:47:46