【发布时间】:2020-08-12 12:46:18
【问题描述】:
我正在开发一个 WordPress 网站,该网站在多个页面上使用 Swiper 库作为 npm 依赖项。该网站包含一个嵌入式 Vue CLI 4 应用程序,我还想将 Swiper 库添加到该应用程序中。目前,该网站有自己的 webpack 配置,而应用程序使用其默认构建配置的略微修改版本。
我可以使用一些 Vue Swiper 组件,但由于我已经在使用原始库,我想避免重复。我认为我需要以某种方式组合我的两个构建过程(除非有其他解决方案),但我之前没有尝试过类似的事情。
主要的webpack配置如下:
const path = require("path");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = (env, options) => {
return {
entry: {
main: ["./src/js/index.js", "./src/scss/index.scss"],
admin: ["./src/scss/admin.scss", "./src/js/admin/index.js"]
},
output: {
path: path.resolve(__dirname, "dist"),
filename: "[name].js",
publicPath: "/dist"
},
module: {
rules: [
{
test: /\.js$/,
use: {
loader: "babel-loader",
options: { presets: ["@babel/preset-env"] }
}
},
{
test: /\.scss$/,
use: [
MiniCssExtractPlugin.loader,
"css-loader",
"sass-loader"
]
},
{
test: /\.svg$/,
use: {
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: '/images',
publicPath(url) {
return `/wp-content/themes/themename/dist/images/${url}`
},
},
}
},
]
},
plugins: [
new MiniCssExtractPlugin({
filename: "[name].css"
})
]
}
};
以及目录结构:
├── app
| ├── src
| ├── dist
| ├── ...
| └── vue.config.js
├── src
├── dist
├── ...
└── webpack.config.js
理想情况下,我希望保持目录原样,那么我如何能够在两个项目中使用 Swiper,而不会在两个包中重复它?
【问题讨论】:
-
那么你是说你在很多页面上都有 swiper 库,但只在一个页面上使用 Vue CLI 4 应用程序?因此,在您的标题中,您包含了包含 swiper 库的脚本,但是当加载特定页面时,您就会有一个包含 vue 应用程序的脚本?
-
@Hides 你的第一个问题是肯定的——这完全正确。然而,目前,Swiper 是通过
index.js导入的,并将 webpack 捆绑到一个文件中。 Vue 应用程序(当前)位于一个页面上。 -
抱歉,您是说 index.js 正在被导入网站,但 vue 应用程序位于另一个文件中,该文件仅在该单个页面上导入?
-
是的,没错。如果您查看上面的目录结构 - app 目录包含主页上包含的所有 Vue 逻辑。 Vue 应用程序有自己的构建过程,与外部文件分开。
-
您是否希望避免将 index 和 vue 应用程序捆绑到一个文件中并在每个页面上调用它?要组合这些过程,您可以编辑您的包脚本以首先构建 vue 应用程序,然后在上层目录中构建您的 index.js 文件。类似 `scripts: { 'build': 'cd app && npm run build && cd ../ && npm run build'}
标签: javascript vue.js webpack vue-cli