我应该如何使用 webpack DefinePlugin 访问 index.ejs 中的哈希包文件名
How should I access hash bundle file name in index.ejs using webpack DefinePlugin
我想在 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)
}
}
})
);
有什么方法可以将 bundle.[hash].js
文件包含在 index.ejs 中。
我尝试通过自己创建哈希函数并导出哈希函数来解决这个问题。
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.<%= process.env.HASH %>.js`;
这个任务可以通过HtmlWebpackPlugin解决,所有选项都可以通过options
控制:
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
将用作 default。
我想在 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)
}
}
})
);
有什么方法可以将 bundle.[hash].js
文件包含在 index.ejs 中。
我尝试通过自己创建哈希函数并导出哈希函数来解决这个问题。
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.<%= process.env.HASH %>.js`;
这个任务可以通过HtmlWebpackPlugin解决,所有选项都可以通过options
控制:
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
将用作 default。