如何在 vue 应用程序中使用独立的 vue 库?

Posted

技术标签:

【中文标题】如何在 vue 应用程序中使用独立的 vue 库?【英文标题】:How can I use standalone vue library in a vue application? 【发布时间】:2021-01-05 08:14:14 【问题描述】:

我正在尝试在 vue 应用程序中使用由脚本标签加载的 vue 组件库。该组件库使用 webpack 设置并使用设置 externals 排除所有 vue 依赖项。因此,使用该库的主机包必须提供 vue 和其他所需的依赖项。 组件库本身正在使用带有脚本vue-cli-service build --target lib 的vue cli 来构建lib.umd.js 文件。在我的主机包的index.html 中,我只是通过脚本标记包含该文件。主机包的 webpack 设置使用config.externals(['@test/my-component-library']) 排除正在外部加载的组件库。在主机包中,我正在使用这样的组件库:

import  MyComponent  from '@test/my-component-library'

当我运行我的应用程序时,我收到以下错误:Uncaught SyntaxError: Invalid or unexpected token。此错误发生在我的主机包的以下行中:

/*!*******************************************************!*\
  !*** external "@test/my-component-library" ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) 
eval("module.exports = @test/my-component-library;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQHRlc3QvbXktY29tcG9uZW50LWxpYnJhcnkuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAdGVzdC9teS1jb21wb25lbnQtbGlicmFyeVwiPzFjOTAiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBAdGVzdC9teS1jb21wb25lbnQtbGlicmFyeTsiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///@test/my-component-library\n");
/***/ )

有谁知道为什么 webpack 会生成这样的代码以及我该如何纠正它?

【问题讨论】:

来自webpack.js.org/configuration/externals 不知道要设置导出模块的类型如root? 如果我使用config.externals('@sldo/sldo-crm-kundenaktionen-plugin': root: '@sldo/sldo-crm-kundenaktionen-plugin' ),错误就消失了。但现在我收到Cannot read property 'MyComponent' of undefined。这是因为我的导入 import MyComponent from '@test/my-component-library' 不起作用。我该怎么办? 【参考方案1】:

我想我找到了解决方案。所以首先我对externals 的配置有误。正确的配置是:

config.externals(
  '@test/my-component-library': 
    root: '@test/my-component-library',
    commonjs2: '@test/my-component-library',
    commonjs: '@test/my-component-library',
    amd: '@test/my-component-library',
  ,
)

在组件库中,我必须添加 webpack 配置 config.output.library('MyComponentLibrary') 以便对象 MyComponentLibrary 在窗口范围内全局可用。然后我不得不删除主机包中的导入语句。要注册组件,我必须将此行添加到我的 vue 文件中:

components: 
  'MyComponent': MyComponentLibrary.MyComponent,

但现在我遇到了另一个问题。组件库本身正在使用 vuetify(这是另一个组件库)。但我也将 vuetify 添加到 externals 选项,因为我的主机包已经包含 vuetify。现在我收到了很多Unknown custom element 异常。所以显然我的组件库在我的主机包中找不到 vuetify 组件。这个问题有解决办法吗?

【讨论】:

我认为如果您发布一个新问题,您将获得更好的答案

以上是关于如何在 vue 应用程序中使用独立的 vue 库?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 模板中使用 vue 库

Vue 是如何用 Rollup 打包的?

36《Vue 入门教程》Vue 第三方库的使用

36《Vue 入门教程》Vue 第三方库的使用

如何在 laravel 中添加库 vue?

如何在Vue+ElementUI项目中使用iconfont图标库