Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用webpack DefinePlugin访问index.ejs中的散列包文件名_Javascript_Reactjs_Webpack_Preact - Fatal编程技术网

Javascript 如何使用webpack DefinePlugin访问index.ejs中的散列包文件名

Javascript 如何使用webpack DefinePlugin访问index.ejs中的散列包文件名,javascript,reactjs,webpack,preact,Javascript,Reactjs,Webpack,Preact,我想在preact项目中使用散列包文件名。 在preact.config.js中,输出文件为config.output.filename=“[name].[hash].js” 插件是使用webpack.DefinePlugin()定义的,如下所示: config.plugins.push( new DefinePlugin({ process: { env: { API_URL: JSON.stringify(process.env.API

我想在preact项目中使用散列包文件名。 在preact.config.js中,输出文件为
config.output.filename=“[name].[hash].js”

插件是使用
webpack.DefinePlugin()
定义的,如下所示:

config.plugins.push(
    new DefinePlugin({
      process: {
        env: {
          API_URL: JSON.stringify(process.env.API_URL),
          FILE_NAME: JSON.stringify(config.output.filename)
        }
      }
    })
  );

有没有办法在index.ejs中包含
bundle.[hash].js
文件。

我试图通过自己创建一个哈希函数并导出哈希函数来解决这个问题

  const hashNumber = hashGenerator();
  delete config.entry.polyfills;
  config.entry.app = "./index.js"
  config.output.filename = "[name]."+hashNumber+".js";

  let { plugin } = helpers.getPluginsByName(config, "ExtractTextPlugin")[0];
  plugin.options.disable = true;

  if (env.production) {
    config.output.libraryTarget = "umd";
  }

  config.plugins.push(
    new DefinePlugin({
      process: {
        env: {
          HASH: JSON.stringify(hashNumber)
        }
      }
    })
  );
};
并将该散列包含在index.ejs文件中


script.src=`/bundle..js`

此任务可以通过解决,所有选项都可以通过
选项
控制:

export default (config, env, helpers) => {
    delete config.entry.polyfills;

    // add hash to the file name.
    config.output.filename = "[name].[hash].js";

    let {plugin} = helpers.getPluginsByName(config, "ExtractTextPlugin")[0];

    let html_webpack = helpers.getPluginsByName(config, 'HtmlWebpackPlugin')[0];

    // not sure why but without this option it does not inject script tag.
    html_webpack.plugin.options.hash = true;

    plugin.options.disable = true;

    if (env.production) {
        config.output.libraryTarget = "umd";
    }
};

在这种情况下,模板
index.ejs
将用作索引

你不需要这个。将您的所有DEP包含到
index.js
中,使用webpack进行编译,并将其作为脚本
bundle.[hash].js
包含到您的文档中。使用HtmlWebpackPlugin?这是一种可能的方法。不,我使用的preact配置无法使用它。更清楚地说,我使用的是模板。如何输出散列包文件并在script.src=`bundle.[hash].js in index.ejsNote中使用该文件名?请注意,引用的插件页面上显示的示例更简单,更接近常规的网页包用法。我想是这样的,这是OP使用的扩展示例。你是对的,只是为寻找更通用的插件使用示例的人指明了方向。抱歉,如果问题严重,现在无法编辑。:)