-
Notifications
You must be signed in to change notification settings - Fork 340
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
build 生产环境不支持 hash文件名吗? #69
Comments
好,下个版本。 |
如果可以的话, 支持hash 后,在build 后 集成 处理html文件中对js,css文件引用的路径修改,以前使用atool-build 时,都是用gulp 处理,,感觉只是光有hash还是很不完美的! |
+1 |
3 similar comments
+1 |
+1 |
+1 |
Workaround: 思路
安装
无需安装 webpack.config.jsconst fs = require('fs')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const WebpackChunkHash = require('webpack-chunk-hash')
module.exports = function (config, env) {
config.module.loaders[0].exclude.push(/\.ejs$/) // 注 1
if (env === 'production') {
config.output.filename = '[name].[chunkhash].js'
config.output.chunkFilename = '[chunkhash].async.js'
config.plugins[3] = new ExtractTextPlugin('[contenthash:20].css') // 注 2
config.plugins.push(
new HtmlWebpackPlugin({
template: 'ejs!src/index.ejs', // 注 3
inject: true,
minify: { collapseWhitespace: true },
production: true,
}),
new WebpackChunkHash({ algorithm: 'md5' })
)
} else {
config.plugins.push(
new HtmlWebpackPlugin({
template: 'ejs!src/index.ejs',
inject: true,
}),
)
}
return config
} [1] roadhog 默认配置把非 特定格式 的文件都用 [2] 覆盖 roadhog 的 配置 [3] roadhog 对 html 默认用的 file-loader,这里的 .roadhogrc{
"env": {
"production": {
"publicPath": "https://cdn.example.com/"
}
}
} index.ejs<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
</head>
<body>
<div id="root"></div>
</body>
</html> index.js去掉 结论这样就同时兼顾了开发环境和部署环境使用同一套 html 入口,并且开发环境使用本地文件,部署环境使用按照文件内容 MD5 命名了的 CDN 文件(方便缓存控制) 参考 |
+1 |
@mdluo 你这个方法试过了吗?我用了一下,报错:
|
@varrant 肯定试过啊,我目前项目里就是这样用的。你看看是不是没装 ejs-loader |
@mdluo 在roadhog里面装ejs-loader吗?还是全局装ejs-loader?还是在项目里面装? |
@varrant 我更新了原文,加了说明和 CDN 的配置 |
else {
config.plugins.push(
new HtmlWebpackPlugin({
template: 'ejs!src/index.ejs',
inject: true,
}),
)
} 这一句我没加,但是我在index.js中同时也引入了index.html 为什么这么做,因为我加上这句话,有问题,报错。 |
我又更新了回复,因为我之前的写法有个问题, chunk 文件不会从 CDN 地址去读 现在直接用 |
请问这个功能加上去了吗? |
说好的下个版本呢。。。 |
说好的下个版本呢。。。 |
说好的下个版本呢。。。 |
说好的下个版本呢、。。 |
有点搞不懂如果要用webpack来解决问题,为什么还要用roadhog?直接用webpack集成就好了啊 |
@nick290 同感 感觉作者把webpack封装了一遍,却又砍掉了很多常用功能 |
v1.0.1 版本, 配置 multipage 为 true 时候会输出如下的 js 。 <script type="text/javascript" src="undefined"></script><script type="text/javascript" src="/index.js"></script> |
@mdluo 请教如何在roadhog开启hash之后, 来自动根据加的 hash 来引入对应的 css 和 js 并生成 html 文件 |
@weishijun14 |
有新的问题:打开hash功能, 加入index.ejs后, build是没问题.
问题;
我现在的解决方法是,:
这样做好麻烦啊, 还要手动改文件,有没有更好的办法? |
所以,问题是 |
#381,我建了个 issue 来跟进这个问题。 |
@holynova 请问ejs文件是放在哪个目录下面?如果是多页面的话roadhogrc 如何配置? |
我也来贴贴我的配置把.
我的这个配置呢,可以在build的时候让静态文件的路径加上 |
roadhog打包出来的index.js有720kb,马上功能迭代了肯定会越来越大,请问有压缩的方法吗,尝试了网上所说的几种配置都不行 |
@manuo123 没做 commonChunk 抽取吗?你的比较大是不是把 react/react-dom 等都打进 index 里了。如果你在用较新版本的 roadhog 的话,可以这样:
这样这些不太变的第三方库,在入口HTML里面单独引入,每次迭代的时候基本上就只有你业务代码了所在的 chunk 了。 |
@xiaosansiji 你好,谢谢你的解答,请问能否提供一个具体的webpack配置的demo |
@manuo123 大概这样,更多设置还是参考 roadhog 的文档吧,我的 roadhog 版本是
|
@xiaosansiji 感谢 |
@xiaosansiji 请问要配打包文件的目录要怎么配呢? 默认是在dist 目录下,现在我想改成在 dist/xxxx目录下。 |
@xiaosansiji 谢谢这个问题我已经解决了。请问我现在想改变引用js的url, 现在是域名/index.js ,我想变成 域名/xxxx/index.js , 请问应该如何修改呢。我尝试修改publicPath 但是,会导致本地访问页面,出现Cannot GET 路径名 , 找不到我项目里的路径。请问你知道应该怎么改吗? |
@xiaosansiji 十分感谢,目前项目在测试环境和本地环境都可以运行了。 |
各位大佬, 我按照你们讨论的写法如下写了,但是打包出来的文件名还是没有处理过的。配置如下:
已经在src下创建index.ejs的文件 package.json:
|
加了
就能用了 |
看了一下config 中的文件, 生产环境中不支持 hash 文件名啊,,希望赶紧支持起来哦!
The text was updated successfully, but these errors were encountered: