Vue.js 和 Webpack,如何构建组件以实现可移植性

Posted

技术标签:

【中文标题】Vue.js 和 Webpack,如何构建组件以实现可移植性【英文标题】:Vue.js and Webpack, how to build components for portability 【发布时间】:2018-05-30 04:52:00 【问题描述】:

假设我有 2 个 Vue.js 应用:app1 和 app2。

两者都实现了单文件组件的方法,并由 webpack 构建到各自的 /dist/build.js 中。

现在我需要在 app2 中使用一个在 app1 内部开发的组件,所以我想知道:有没有办法指示 webpack 不将整个 app1 构建到单个 /dist/build.js 中,而是生成 N 个不同的“构建” js 文件来分隔可重用组件,这样我就可以获取 app1/dist/components.build.js 并以某种方式直接导入 app2 而无需将 .vue 文件复制到那里?

我对 Vue 和 Webpack 还很陌生,所以我什至不确定这个问题是否有意义......

【问题讨论】:

您是否正在寻找类似***.com/questions/47754244/… 的东西? 不,我不需要创建npm包,我只需要一个可以与其他应用程序共享的js文件... 【参考方案1】:

Webpack 支持代码拆分,实际上是它必须提供的更酷的功能之一。

你的 webpack 配置看起来像这样:

module.exports = 
    entry: 
        app1: 'path/to/app1/dir',
        app2: 'path/to/app2/dir/excluding/chunked/component',
        app3: 'path/to/app2/chunked/component',
    ,
    plugins: [
        new htmlWebpackPlugin( title: 'Code Split' ),
        new webpack.optimize.CommonsChunkPlugin(
           name: 'common' // Specify name for your common app modules 
                          // i.e vendors, etc.
        )
    ],
    output: [
        filename: '[name].bundle.js',
        path: path.resolve(__dirname, 'dist')
    ]

这样的事情应该可以实现您的目标。它可能需要一些调整,但您应该能够隔离您想要的组件并提取它,同时将所有常见代码捆绑在一起。

【讨论】:

我明天试试! 这似乎是部分解决方案:组件的JS部分实际上已发布,但在运行时无法找到模板(我收到“无法安装组件:模板或渲染函数未定义。”,当我尝试从另一个应用程序实例化组件时。

以上是关于Vue.js 和 Webpack,如何构建组件以实现可移植性的主要内容,如果未能解决你的问题,请参考以下文章

vue.js 从 cdn 加载脚本,然后组件 vue(没有 webpack)

在 Vue.js 2 组件中加载时未定义 Webpack 外部 JS 文件

组件的 vue.js 自定义 css(没有 webpack 和 vue-loader)

Vue js 通过 Webpack 将包拆分成几个文件

Vue + Typescript + Webpack:模块构建失败 - 找不到 vue.esm.js

Vue.js / Webpack 使用 CSS 和 JS 的“静态”子域构建“index.html”