使用webpack将AngularJS和Vue.js构建到一个应用程序中?

7dl7o3gd  于 2022-11-13  发布在  Webpack
关注(0)|答案(1)|浏览(199)

这可能看起来有点复杂,可能的答案是“不要那样做,这样做”,所以我将从我正在做的背景开始。基本上,我有一个遗留的AngularJS应用程序,我们希望从Vue迁移到Vue。我们没有端到端重写应用程序的选项,需要一个一个地做,同时仍然提供一个功能性的应用程序。
总的目标是让两个框架同时运行,我希望我可以做一些路由或潜在地将我的单页应用程序分为2个独立的页面,用于不同的框架。我已经将angularjs从使用gulp构建管道转换为使用webpack,因为我认为这是让Vue运行的逻辑第一步,但现在我遇到了一个障碍。
我用于构建angular应用程序的工作webpack.config.js如下所示:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    target: 'web',
    // mode: "development",
    // devtool: "source-map",
    module: {
        rules: [

            {
                test: /\.html$/,
                loader: "html-loader",
            },
            {
                test: /\.s[ac]ss$/i,
                use: [
                  "style-loader",
                  "css-loader",
                  "sass-loader",
                ],
              },
              {
                test: require.resolve("jquery"),
                loader: "expose-loader",
                options: {
                  exposes: ["$", "jQuery"],
                },
              }
        ],
    },
    entry: {
        vendor: "./source/vendor.js",
        main: "./source/index.js",
    },
    optimization: {
        minimize: false
    },
    output: {
        filename: '[name].bundle.js',
        path: path.resolve(__dirname, 'distribution'),
        clean:true
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: 'source/index.html',
        })
    ]
};

这现在工作得很好,我得到了一些东西,添加结束,因为它以前的工作。
然后我添加了一个/source/vueJs目录,并复制粘贴了vue create hello-world生成的hello world项目的内容。我的假设是,如果我可以修改我的webpack.config.js来构建这个项目,那么我就可以进一步迭代它,直到它将两个工作的应用程序合并在一起,但是我已经在努力让hello-world vue项目产生任何东西。
到目前为止,我基本上注解掉了所有相关的angularJS部分,并添加了我认为正确的内容来构建vue应用程序,所以现在我有了这个:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { VueLoaderPlugin } = require('vue-loader')

module.exports = {
    target: 'web',
    mode: "development",
    devtool: "source-map",
    module: {
        rules: [

            // {
            //     test: /\.html$/,
            //     loader: "html-loader",
            // },
            // {
            //     test: /\.s[ac]ss$/i,
            //     use: [
            //       "style-loader",
            //       "css-loader",
            //       "sass-loader",
            //     ],
            //   },
            //   {
            //     test: require.resolve("jquery"),
            //     loader: "expose-loader",
            //     options: {
            //       exposes: ["$", "jQuery"],
            //     },
            //   },
            {
                test: /\.(png|jpe?g|gif)$/i,
                use: [
                  {
                    loader: 'file-loader',
                  },
                ],
              },
              {
                test: /\.vue$/,
                loader: 'vue-loader'
              },
              // this will apply to both plain `.js` files
              // AND `<script>` blocks in `.vue` files
              {
                test: /\.js$/,
                loader: 'babel-loader'
              },
              // this will apply to both plain `.css` files
              // AND `<style>` blocks in `.vue` files
              {
                test: /\.css$/,
                use: [
                  'vue-style-loader',
                  'css-loader'
                ]
              }
        ],
    },
    entry: {
        // vendor: "./source/vendor.js",
        // angular: "./source/index.js",
        vue: "./source/vueJs/index.js"
    },
    optimization: {
        minimize: false
    },
    output: {
        filename: '[name].bundle.js',
        path: path.resolve(__dirname, 'distribution'),
        clean:true
    },
    plugins: [
        new HtmlWebpackPlugin({
            //template: 'source/index.html',
        }),
        new VueLoaderPlugin()
    ],
};

这个运行得很好,我得到了一个包含我的资产的distribution/目录,但是服务的站点运行起来好像根本没有运行javascript.比较我的版本中npx webpack的输出和hello-world项目中npx vue-cli-service build的输出,javascript是相似的,但是在很多关键方面是不同的,首先,我的版本似乎没有像Hello World项目那样嵌入任何HTML。
尝试从webpack编译vue应用程序会失败吗?你只能使用vue-cli-service build来编译,因此只能使用vue吗?我试着使用https://cli.vuejs.org/guide/webpack.htmlhttps://cli.vuejs.org/config/中的信息修改我的vue.config.js,但坦白说,我觉得我在这一点上超出了我的深度,不确定我所做的是否是一个好主意。
有没有更好的策略来达到我的最终目标?如果这是一个可行的解决方案,我需要对我的配置做什么改变才能让angularjs和vue应用程序都正确构建?

s4n0splo

s4n0splo1#

问题不是webpack.config.js不能成功地生成一个工作正常的angular & vue组合应用程序,问题是我没有提供一个真正 * 使用 * 这两个东西的模板,所以它只生成了一个空白的index.html,里面有提供的脚本,但正文中没有内容。
更改

new HtmlWebpackPlugin({
        //template: 'source/index.html',
    }),

在我的问题有一个模板,同时使用一个AnularJS组件和一个Vue组件工作良好。

相关问题