【问题标题】:How to get original function parameter names in production webpack build如何在生产 webpack 构建中获取原始函数参数名称
【发布时间】:2020-08-01 06:15:01
【问题描述】:

我正在尝试实现类似于依赖注入的东西,通过从 javascript 模块公开的函数中获取参数名称,如下所示:

module.exports = (router,form,query,url) => {

    // Do something with these parameters ...

    return response;
};

我可以通过解析函数的字符串表示来解决这个问题。 There's already a SO thread for that.

当代码与 webpack 捆绑用于生产时,我的问题变得很明显,所有参数名称都被破坏了,原始名称丢失了。

我在 webpack 配置中找不到任何可以帮助我的选项。

有没有办法做我想做的事,而不会让导出函数的模块担心与这个问题相关的任何事情?

【问题讨论】:

    标签: javascript webpack reflection function-parameter webpack-production


    【解决方案1】:

    看看 webpack TerserPlugin 缩小选项: From here

    您可以自己处理此文件缩小或根本不缩小它。

    类似的东西:

    module.exports = {
      optimization: {
        minimize: true,
        minimizer: [
          new TerserPlugin({
            minify: (file, sourceMap) => {
              if (file.name == <Your_file_with_DI_function>) {
                  return null;
              }
    
              const { error, map, code, warnings } = require('uglify-module')
                   .minify(file, {
                  /* Your options for minification */
                });
    
              return { error, map, code, warnings, []};
            },
          }),
        ],
      },
    };
    

    【讨论】:

    • 我在一个小示例项目上试过这个,看起来函数只在结果包文件上被调用。文件对象没有name 属性,但它确实具有文件名作为属性。此外,null 作为返回值无效,它必须是包含有关缩小代码的信息的对象。我想我会从缩小过程中排除目标模块。
    【解决方案2】:

    我正在尝试做的事情是不可能的。

    当代码到达最小化插件时,它已经被连接成一个单独的包文件。

    另一种选择是使用uglify-loader,但这仅适用于模块级别,因此您会得到封装实际模块的非缩小代码。

    【讨论】:

      猜你喜欢
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多