这可能看起来有点复杂,可能的答案是“不要那样做,这样做”,所以我将从我正在做的背景开始。基本上,我有一个遗留的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.html和https://cli.vuejs.org/config/中的信息修改我的vue.config.js,但坦白说,我觉得我在这一点上超出了我的深度,不确定我所做的是否是一个好主意。
有没有更好的策略来达到我的最终目标?如果这是一个可行的解决方案,我需要对我的配置做什么改变才能让angularjs和vue应用程序都正确构建?
1条答案
按热度按时间s4n0splo1#
问题不是
webpack.config.js
不能成功地生成一个工作正常的angular & vue组合应用程序,问题是我没有提供一个真正 * 使用 * 这两个东西的模板,所以它只生成了一个空白的index.html
,里面有提供的脚本,但正文中没有内容。更改
在我的问题有一个模板,同时使用一个AnularJS组件和一个Vue组件工作良好。