【问题标题】:Webpack Obfuscator Issue: Cannot read property 'tap' of undefinedWebpack 混淆器问题:无法读取未定义的属性“tap”
【发布时间】:2021-07-12 22:09:31
【问题描述】:

我需要帮助来混淆我的打字稿代码。我正在使用这个 Electron 模板,尽管这个问题似乎是 webpack 和混淆器所特有的。

https://github.com/codesbiome/electron-react-webpack-typescript-2021

我正在使用以下版本:

"webpack": "4.46.0",
"webpack-obfuscator": "^3.3.0"

我的配置是:

webpack.main.js

module.exports = {
  /**
   * This is the main entry point for your application, it's the first file
   * that runs in the main process.
   */
  entry: ['./src/main.ts'],
  // Put your normal webpack config below here
  module: {
    rules: require('./webpack.rules'),
  },
  resolve: {
    extensions: ['.js', '.ts', '.jsx', '.tsx', '.css', '.json'],
    alias: require('./webpack.aliases'),
  },
};

webpack.rules.js

const { inDev } = require('./webpack.helpers');
const path = require('path');
const WebpackObfuscator = require('webpack-obfuscator');

module.exports = [
  {
    // Add support for native node modules
    test: /\.node$/,
    use: 'node-loader',
  },
  {
    // Webpack asset relocator loader
    test: /\.(m?js|node)$/,
    parser: { amd: false },
    use: {
      loader: '@marshallofsound/webpack-asset-relocator-loader',
      options: {
        outputAssetBase: 'native_modules',
      },
    },
  },
  {
    // Typescript loader
    test: /\.tsx?$/,
    exclude: /(node_modules|\.webpack)/,
    use: {
      loader: 'ts-loader',
      options: {
        transpileOnly: true,
      },
    },
  },
  {
    // CSS Loader
    test: /\.css$/,
    use: [{ loader: 'style-loader' }, { loader: 'css-loader' }],
  },
  {
    // Less loader
    test: /\.less$/,
    use: [
      { loader: 'style-loader' },
      { loader: 'css-loader' },
      { loader: 'less-loader' },
    ],
  },
  {
    // Images Loader
    test: /\.(gif|jpe?g|tiff|png|webp|bmp|svg)$/,
    use: [
      {
        loader: 'file-loader',
        options: {
          publicPath: 'assets/images',
          outputPath: inDev() ? 'assets/images' : './main_window/assets/images',
        },
      },
    ],
  },
  {
    // Font & SVG loader
    test: /\.(woff(2)?|ttf|otf|eot)$/,
    use: [
      {
        loader: 'file-loader',
        options: {
          publicPath: 'assets/fonts',
          outputPath: inDev() ? 'assets/fonts' : './main_window/assets/fonts',
        },
      },
    ],
  },
  {
    test: /\.tsx?$/,
    exclude: /node_modules/,
    enforce: 'post',
    use: {
      loader: WebpackObfuscator.loader,
      options: {
        rotateStringArray: true,
      },
    },
  },
];

webpack.plugin.js

const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
const WebpackObfuscator = require('webpack-obfuscator');

module.exports = [
  new ForkTsCheckerWebpackPlugin(),
  new WebpackObfuscator(
    {
      rotateStringArray: true,
    },
    ['excluded_bundle_name.js'],
  ),
];

错误是:

An unhandled error has occurred inside Forge:
Cannot read property 'tap' of undefined
TypeError: Cannot read property 'tap' of undefined
    at /Users/mt/Desktop/ca/ca-app/node_modules/webpack-obfuscator/dist/plugin/index.js:25:45
    at SyncHook.eval (eval at create (/Users/mt/Desktop/ca/ca-app/node_modules/tapable/lib/HookCodeFactory.js:19:10), <anonymous>:13:1)
    at SyncHook.lazyCompileHook (/Users/mt/Desktop/ca/ca-app/node_modules/tapable/lib/Hook.js:154:20)
    at Compiler.newCompilation (/Users/mt/Desktop/ca/ca-app/node_modules/webpack/lib/Compiler.js:631:26)
    at /Users/mt/Desktop/ca/ca-app/node_modules/webpack/lib/Compiler.js:667:29
    at AsyncSeriesHook.eval [as callAsync] (eval at create (/Users/mt/Desktop/ca/ca-app/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
    at AsyncSeriesHook.lazyCompileHook (/Users/mt/Desktop/ca/ca-app/node_modules/tapable/lib/Hook.js:154:20)
    at Compiler.compile (/Users/mt/Desktop/ca/ca-app/node_modules/webpack/lib/Compiler.js:662:28)
    at /Users/mt/Desktop/ca/ca-app/node_modules/webpack/lib/Watching.js:77:18
    at AsyncSeriesHook.eval [as callAsync] (eval at create (/Users/mt/Desktop/ca/ca-app/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:33:1)
    at AsyncSeriesHook.lazyCompileHook (/Users/mt/Desktop/ca/ca-app/node_modules/tapable/lib/Hook.js:154:20)
    at Watching._go (/Users/mt/Desktop/ca/ca-app/node_modules/webpack/lib/Watching.js:41:32)
    at /Users/mt/Desktop/ca/ca-app/node_modules/webpack/lib/Watching.js:33:9
    at Compiler.readRecords (/Users/mt/Desktop/ca/ca-app/node_modules/webpack/lib/Compiler.js:529:11)
    at new Watching (/Users/mt/Desktop/ca/ca-app/node_modules/webpack/lib/Watching.js:30:17)
    at Compiler.watch (/Users/mt/Desktop/ca/ca-app/node_modules/webpack/lib/Compiler.js:244:10)

提前致谢。

【问题讨论】:

    标签: javascript typescript webpack electron obfuscation


    【解决方案1】:

    "webpack-obfuscator": "^3.3.0"

    使用 webpack 4 你需要 webpack-obfuscator 2.6.0

    npm install --save-dev webpack-obfuscator@2.6.0

    【讨论】:

    • 感谢@RonaldT 它适用于 Webpack 4 和混淆器 2.6.0。但是,当我使用 Webpack 5.1.1 和 Obfuscator 3.3.0 时,我遇到了相同的未定义的“tap”属性。有什么解决这个问题的建议吗?
    • 不适合我:html-webpack-plugin@5.3.2 | webpack@4.39.2
    • 谢谢@RonaldT
    猜你喜欢
    • 2021-12-14
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 2019-09-05
    • 2021-09-26
    • 2022-01-01
    • 2021-10-31
    相关资源
    最近更新 更多