1.4.8
windows10 / chrome 62
2.5.2
https://github.com/zhaokuohaha/dll-element-ui-test
详细见项目
Readme.md
运行 npm run dll
可以看到element-ui
及其各个组件已经被打包到vendor.dll
中
运行 npm run build --report
可以看到在编译生成的代码中已经没有了ElementUI
的依赖, 符合预期需求
运行npm run dev
发现鼠标移动到按钮上的时候没有弹出ToolTip
Bug重现.
Tooltp能够正常显示
Tooltip没有显示, 并且没有报错
Translation of this issue:
1.4.8
Windows10 / Chrome 62
2.5.2
https://github.com/zhaokuohaha/dll-element-ui-test
see item
Readme.md
in detail
npm run dll
, you can see that element-ui
and its components have been packaged into vendor.dll
running npm run build --report
, you can see that there is no dependency on ElementUI
in the compiled code, which meets the expected requirements
running npm run dev
, found that the mouse moved to the button when there is no pop-up ToolTip
Bug reproduction
Tooltp can display normally
Tooltip does not display and does not report errors
先下结论:这一切并不是element-ui的问题,全部都是你的webpack配置问题。
npm run dev
没有预期现象发生。。把你base.config下面的 plugins注释掉。。@liaoyinglong 如果注视掉的话, 打包后vendor.hash.js
体积还是会恨到, 就是 emmm 没有把 vendor.dll.js
正确引用到. 😂
我先看看您的项目把, 感觉里面能找到答案
我们不认为这个是 Element 本身的问题,先关了。如果能证明是 Element 的问题,欢迎再打开。
@zhaokuohaha 我遇到了类似问题,是加载时序导致的问题。
vendor.dll.js 没有加载完毕的时候,vue template 中的el-popover 已经开始解析了,导致出现 Failed to resolve directive: popover
错误。
解决方法是在使用 popover 的地方(例如你demo的dll-element-ui-test/src/components/HelloWorld.vue)显示 import Popover:
import { Vue } from 'vue';
import { Popover } from 'element-ui';
Vue.use(Popover);
好的我试试看, 谢谢~
只有Tooltip组件没显示,其他组件都没问题,希望能够解决问题 毕竟element-ui解压有0.5M 开发模式会节省很多时间!
2.4中还有这个问题
2.4中还有这个问题,怎么我已经单独注册了 tooltip还是有问题
我在测试项目里面做了一点点尝试, 但是没有什么实质性的进展:
https://github.com/zhaokuohaha/dll-element-ui-test/issues/1
@VitaChen1228 @shimuren @mythxiaoai
在packpackge.json中的dependencies添加“element-ui": "^2.4.6":
"dependencies": {
"vue": "^2.5.2",
"vue-router": "^3.0.1",
"element-ui": "^2.4.6"
}
这样是可以的
@707293891 我试着把我的依赖升级到2.4.6
但是好像还是没有什么效果:
https://github.com/zhaokuohaha/dll-element-ui-test/commit/38c5a9f94bf57b3ac28a2b8f7ce4626e19ee73b0
你是用@vue/cli
3.0来构建的项目么, 还是以前的vue-cli 2.x
? 难道是webpack升级之后解决了这个问题?
@zhaokuohaha "webpack": "^3.6.0",
@zhaokuohaha 是用的最新的cli
@707293891 你的项目有开源嘛, 我想去看一下相关配置 😂
@zhaokuohaha 没有改动什么配置,用vue-cli生成项目,然后把element配置加进去,然后安装
emmm 所以... 用webpack-plugin-dll
了么 @707293891 , 可能我们说的不是同一个问题
的确存在这个问题
页面上innerHTML 元素之后 element-ui的tooltip 直接失效大家有遇见过吗
@zhaokuohaha 问题是一样到,可能原因不一样
那就不知道了, 可以看一下我的测试项目有什么不一样, 我的是webpack 3.x , vue-cli 2.x, vue 2.5.x, element 2.4.6
有可能在后期npm install 的时候又把element污染了,我这重新在git上clone了一份就能用了~~
... ...
之前也深入了解了一下,下图是tooltip失效时的一个属性,
再对比下正常的
找到了原因,然并卵,并不知道怎么破~~
顺便说下,Vue.js devtools,谷歌浏览器插件,了解一下.
你这走的比我远哈哈哈, 这可能是一个很有用的信息, 我晚上回去搞一搞看
大家都遇到这个问题,官方却说不是问题,大家只好自己动手,丰衣足食了,哈
我也遇到这样的问题,但是,我用了你们对话的方法,还是不行.
@fanxiaolong 我觉得还是要么不要打包dll, 要么用cdn的办法引入好一些. 毕竟element也是一个要不断更新的包:joy:
@zhaokuohaha ,加了Popover也不行,请问你怎么解决
@lsx18 没有解决, 放弃dll打包了 😂
@zhaokuohaha 转用http://element.eleme.io/#/zh-CN/component/popover#popover-dan-chu-kuang 怎么样?
@lsx18 用时可以用啦. 至于实际上用不用还是看需求吧
@zhaokuohaha @lsx18 我已经解决了我的问题,我是升级了npm包之后,其他什么都不用调整,就可以了.
npm的我给大家发一下.以下,是我当前npm包的配置,你们对比一下,看一看.
`
{
"vue": "^2.5.17",
"element-ui": "^2.4.8",
"vue-template-compiler": "^2.5.17", //比较重要的一个包,升级一下.
"webpack": "^3.6.0"
}
`
代码样式,没有出来,重新发一下.
{
"vue": "^2.5.17",
"element-ui": "^2.4.8",
"vue-loader": "^10.0.2",
"vue-template-compiler": "^2.5.17", //比较重要的一个包,一定要升级一下.
"webpack": "^3.6.0",
}
@fanxiaolong 我刚刚按照你的配置试了一下, 好像还是没有解决。 不知道是什么原因。
我升级完了之后重新运行下面的命令, 结果tootip还是不能显示, 运行npm run dev
是可以正常显示的
npm run dll
npm run build
# 我本地装了 node-static 来启动一个简单的服务器
static ./dist/
项目指路 -> dll-element-ui-test
看最新一次提交。
而且发现一个问题: vue-template-compiler
升级之后, node_modules里面没有发现这个包了, 只有下面这些:
@zhaokuohaha 你把以前的相关的包重新删除了,再重新全部安装一下,这个问题,我觉得主要是出在,打包时候的模板编译那里, "vue-loader",vue-template-compiler"这个两个包,一定要安装正确版本.
webpack.renderer.config.js里面
webpack.renderer.config.js 里面 ,大约21行左右, let whiteListedModules = ['vue', 'element-ui']把element-ui加入白名单就可以了
eleUI依赖vue.runtime.esm.js
但是你的项目依赖的是vue.esm.js
最终dll里面有两个vue,就导致tooltip的popper没有初始化
解决方法,保持dll.config和base.config中alias的vue一致
@fanxiaolong 我改了好久没解决,看到你这条,我就按照你说的,把node_moudules里面的东西都删了,重新 npm install . 完美解决
{
"vue": "^2.5.22",
"element-ui": "^2.4.11",
"vue-loader": "^15.5.1",
"vue-template-compiler": "^2.5.22",
"webpack": "^4.28.2",
}
把node_moudules里面的东西都删了,试过重新 npm install 都解决不了
{
"vue": "^2.5.22",
"element-ui": "^2.4.11",
"vue-loader": "^15.5.1",
"vue-template-compiler": "^2.5.22",
"webpack": "^4.28.2",
}
把node_moudules里面的东西都删了,试过重新 npm install 都解决不了
我那个是因为依赖包冲突,你这个重新安装都不行肯定是配置文件的问题,package.json的文件要修改才行,不然每次npm imstall下载下来的都是一样的东西
{
"vue": "^2.5.22",
"element-ui": "^2.4.11",
"vue-loader": "^15.5.1",
"vue-template-compiler": "^2.5.22",
"webpack": "^4.28.2",
}
把node_moudules里面的东西都删了,试过重新 npm install 都解决不了
"axios": "^0.18.0",
"better-scroll": "^1.13.2",
"echarts": "^4.1.0",
"element-ui": "^2.4.7",
"js-cookie": "^2.2.0",
"lowdb": "^1.0.0",
"moment": "^2.22.2",
"promise.prototype.finally": "^3.1.0",
"v-charts": "^1.17.10",
"vee-validate": "^2.0.9",
"vue": "^2.5.2",
"vue-clipboard2": "^0.2.1",
"vue-i18n": "^7.6.0",
"vue-infinite-loading": "^2.4.3",
"vue-router": "^3.0.1",
"vuedraggable": "^2.17.0",
"vuex": "^3.0.1"
这个是我的依赖。版本 还有依赖之间是否有冲突都要注意
有可能在后期npm install的时候又把元素污染了,我这重新在git上克隆了一份就能用了~~
... ...前前
也深入了解了一下,下图是tooltip失效时的一个属性, 再对比下正常的 找到了原因,然并卵,并不知道怎么破~~ 顺便说下,Vue.js devtools,谷歌浏览器插件,了解一下。
you can do like this
import { Tooltip } from 'element-ui'
Tooltip.props.popperOptions = {
default: () => {
return {
arrowOffset: 0,
boundariesPadding: 10,
gpuAcceleration: false,
offset: 0,
placement: 'bottom'
}
}
}
in your entry file
删了之后 install 可以了 什么原理
删了之后 install 可以了 什么原理
因为我这个项目地址是别人创建并初始化的,我在拉项目的时候被别人的代码污染了,导致node_moudules里面出现了冲突。我的好像是webpack和vee的冲突。
总之 先保证自己的package.json里面的依赖没有问题,然后删掉node_moudules里面的文件 重新install
在 webpack.dll.conf.js 里面加入
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
}
},
alias
好使了666
问题是elTooltip引入了vue, 重写beforeCreate方法可以解决这个问题,代码如下:
ElementUI.ElTooltip.beforeCreate = function () {
if (this.$isServer) return;
this.popperVM = new Vue({
data: { node: '' },
render(h) {
return this.node;
}
}).$mount();
let that = this
this.debounceClose = debounce(200, () => this.handleClosePopper());
}
},
在el-table表头引用的elTooltip也要能通过重写,替换Vue
在 webpack.dll.conf.js 里面加入
resolve: { extensions: ['.js', '.vue', '.json'], alias: { 'vue$': 'vue/dist/vue.esm.js', } },
这种方式在vue-cli3配置了,无效;
解决了
# 这样是不显示tooltip的
<el-tooltip effect="dark" content="你好啊">
放我这
</el-tooltip>
# 这样显示tooltip的
<el-tooltip effect="dark" content="你好啊">
<p>放我这</p>
</el-tooltip>
看起来是el-tooltip里得是一个元素,不能直接是text
在 webpack.dll.conf.js 里面加入
resolve: { extensions: ['.js', '.vue', '.json'], alias: { 'vue$': 'vue/dist/vue.esm.js', } },
@Constaline 66666,vue/cli2可以使用此法解决
版本:Element-UI 2.3.9
组件: el-table el-table-column设置属性show-overflow-tooltip = true在chrome、Safari上可以显示,但是在Firefox上无效
webpack.renderer.config.js 里面 ,大约21行左右, let whiteListedModules = ['vue', 'element-ui']把element-ui加入白名单就可以了
亲测这个办法可用!
webpack.renderer.config.js 里面 ,大约21行左右, let whiteListedModules = ['vue', 'element-ui']把element-ui加入白名单就可以了
亲测可用,2020了还要用到也真是…
终于解决了,我本来用的是 element-ui 2.11.1,试了各种方法,终于在在 element-ui 2.2.2 版本上解决了我 dll 打包之后,table 不显示的问题
在el-table表头引用的elTooltip也要能通过重写,替换Vue
能说的在具体点吗?是在自己代码里覆写吗?我看toolitp 源码和这个是一样的,如果在自己代码里覆写,debounce 怎么引用呢
Most helpful comment
在 webpack.dll.conf.js 里面加入