在build生成的dist目录下起本地服务,页面空白 控制台warning
3344567 opened this issue · comments
// vue.config.js
const webpack = require("webpack");
const path = require("path");
const resolve = dir => path.join(__dirname, dir);
const IS_PROD = process.env.NODE_ENV !== "development";
const glob = require("glob");
const pagesInfo = require("./pages.config");
const pages = {};
glob.sync("./src/**/main.js").forEach(p => {
let result = p.match(/\.\/src\/(.*)\/main\.js/);
result = result ? result[1] : "";
const key = result ? result : "main";
if (pagesInfo[key]) {
pages[key] = {
entry: result ? `src/${result}/main.js` : "src/main.js"
};
for (const info in pagesInfo[key]) {
pages[key] = {
...pages[key],
[info]: pagesInfo[key][info]
};
}
}
});
module.exports = {
publicPath: "./", // 默认'/',部署应用包时的基本 URL
// outputDir: process.env.outputDir || 'dist', // 'dist', 生产环境构建文件的目录
// assetsDir: "", // 相对于outputDir的静态资源(js、css、img、fonts)目录
configureWebpack: config => {
config.externals = {
vue: "Vue",
"element-ui": "ELEMENT",
"vue-router": "VueRouter",
vuex: "Vuex",
axios: "axios"
};
},
chainWebpack: config => {
// 修复HMR
config.resolve.symlinks(true);
config.plugin("ignore").use(new webpack.ContextReplacementPlugin(/moment[/\\]locale$/, /zh-cn$/));
// 添加别名
config.resolve.alias.set("@", resolve("src"));
const cdn = {
// 访问https://unpkg.com/element-ui/lib/theme-chalk/index.css获取最新版本
css: ["//unpkg.com/element-ui@2.10.1/lib/theme-chalk/index.css"],
js: [
"//unpkg.com/vue@2.6.10/dist/vue.min.js", // 访问https://unpkg.com/vue/dist/vue.min.js获取最新版本
"//unpkg.com/vue-router@3.0.6/dist/vue-router.min.js",
"//unpkg.com/vuex@3.1.1/dist/vuex.min.js",
"//unpkg.com/axios@0.19.0/dist/axios.min.js",
"//unpkg.com/element-ui@2.10.1/lib/index.js"
]
};
// 如果使用多页面打包,使用vue inspect --plugins查看html是否在结果数组中
// config.plugin("html").tap(args => {
// // html中添加cdn
// args[0].cdn = cdn;
// // 修复 Lazy loading routes Error
// args[0].chunksSortMode = "none";
// return args;
// });
// 防止多页面打包卡顿
config => config.plugins.delete("named-chunks");
// 多页面cdn添加
Object.keys(pagesInfo).forEach(page => {
config.plugin(`html-${page}`).tap(args => {
// html中添加cdn
args[0].cdn = cdn;
// 修复 Lazy loading routes Error
args[0].chunksSortMode = "none";
return args;
});
});
return config;
},
pages,
css: {
extract: IS_PROD,
sourceMap: false,
loaderOptions: {
scss: {
// 向全局sass样式传入共享的全局变量, $src可以配置图片cdn前缀
// 详情: https://cli.vuejs.org/guide/css.html#passing-options-to-pre-processor-loaders
// prependData: `
// @import "@/scss/variables.scss";
// @import "@/scss/mixins.scss";
// @import "@/scss/function.scss";
// $src: "${process.env.VUE_APP_OSS_SRC}";
// `
}
}
},
lintOnSave: false,
runtimeCompiler: true, // 是否使用包含运行时编译器的 Vue 构建版本
productionSourceMap: !IS_PROD, // 生产环境的 source map
parallel: require("os").cpus().length > 1
};
// pages.config.js
module.exports = {
main: {
template: "public/index.html",
filename: "index.html",
title: "主页",
chunks: ["chunk-vendors", "chunk-common", "index"]
}
// "pages/admin": {
// template: "public/index.html",
// filename: "admin.html",
// title: "后台管理",
// chunks: ["chunk-vendors", "chunk-common", "index"]
// },
// "pages/mobile": {
// template: "public/index.html",
// filename: "mobile.html",
// title: "移动端",
// chunks: ["chunk-vendors", "chunk-common", "index"]
// }
};
The resource http://127.0.0.1:8080/js/main.6ec50182.js was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate as
value and it is preloaded intentionally.
当我尝试将pages,也就是多页面注释后,页面正常
似乎是这里的问题
chunks: ["chunk-vendors", "chunk-common", "index"]
当我尝试注释掉这一行,页面正常
我无法再进一步解释
重新测试了下,并改了下东西,默认只将pages目录main.js视为多站点入口
现在打包是没问题的,
开发环境下:
访问http://172.23.4.62:8080/pages/admin
页面显示为
// pages.config.js
module.exports = {
admin: {
template: "public/index.html",
filename: "admin.html",
title: "后台管理"
}
};
src目录下新建pages目录,pages目录下新建admin目录,admin目录下新建main.js
// src/pages/admin/main.js
import Vue from "vue";
import App from "@/App.vue";
// import "core-js";
// import "regenerator-runtime/runtime";
Vue.config.productionTip = false;
new Vue({
render: h => h(App)
}).$mount("#app");
// vue.config.js
const webpack = require("webpack");
const path = require("path");
const resolve = dir => path.join(__dirname, dir);
const IS_PROD = process.env.NODE_ENV !== "development";
const glob = require("glob");
const pagesInfo = require("./pages.config");
const pages = {};
glob.sync("./src/pages/**/main.js").forEach(entry => {
let chunk = entry.match(/\.\/src\/pages\/(.*)\/main\.js/)[1];
const curr = pagesInfo[chunk];
if (curr) {
pages[chunk] = {
entry,
...curr,
chunk: ["chunk-vendors", "chunk-common", chunk]
};
}
});
module.exports = {
publicPath: "./", // 默认'/',部署应用包时的基本 URL
// outputDir: process.env.outputDir || 'dist', // 'dist', 生产环境构建文件的目录
// assetsDir: "", // 相对于outputDir的静态资源(js、css、img、fonts)目录
configureWebpack: config => {
config.externals = {
vue: "Vue",
"element-ui": "ELEMENT",
"vue-router": "VueRouter",
vuex: "Vuex",
axios: "axios"
};
},
// 禁止hash
filenameHashing: false,
chainWebpack: config => {
// 修复HMR
config.resolve.symlinks(true);
config.plugin("ignore").use(new webpack.ContextReplacementPlugin(/moment[/\\]locale$/, /zh-cn$/));
// 添加别名
config.resolve.alias.set("@", resolve("src"));
const cdn = {
// 访问https://unpkg.com/element-ui/lib/theme-chalk/index.css获取最新版本
css: ["//unpkg.com/element-ui@2.10.1/lib/theme-chalk/index.css"],
js: [
"//unpkg.com/vue@2.6.10/dist/vue.min.js", // 访问https://unpkg.com/vue/dist/vue.min.js获取最新版本
"//unpkg.com/vue-router@3.0.6/dist/vue-router.min.js",
"//unpkg.com/vuex@3.1.1/dist/vuex.min.js",
"//unpkg.com/axios@0.19.0/dist/axios.min.js",
"//unpkg.com/element-ui@2.10.1/lib/index.js"
]
};
// 防止多页面打包卡顿
config => config.plugins.delete("named-chunks");
// 多页面cdn添加
Object.keys(pagesInfo).forEach(page => {
config.plugin(`html-${page}`).tap(args => {
// html中添加cdn
args[0].cdn = cdn;
// 修复 Lazy loading routes Error
args[0].chunksSortMode = "none";
return args;
});
});
return config;
},
pages,
css: {
extract: IS_PROD,
sourceMap: false,
loaderOptions: {
scss: {
// 向全局sass样式传入共享的全局变量, $src可以配置图片cdn前缀
// 详情: https://cli.vuejs.org/guide/css.html#passing-options-to-pre-processor-loaders
// prependData: `
// @import "@/scss/variables.scss";
// @import "@/scss/mixins.scss";
// @import "@/scss/function.scss";
// $src: "${process.env.VUE_APP_OSS_SRC}";
// `
}
}
},
lintOnSave: false,
runtimeCompiler: true, // 是否使用包含运行时编译器的 Vue 构建版本
productionSourceMap: !IS_PROD, // 生产环境的 source map
parallel: require("os").cpus().length > 1
};
现在打包是没问题的,
开发环境下:
访问http://172.23.4.62:8080/pages/admin
页面显示为
// pages.config.js module.exports = { admin: { template: "public/index.html", filename: "admin.html", title: "后台管理" } };
src目录下新建pages目录,pages目录下新建admin目录,admin目录下新建main.js// src/pages/admin/main.js import Vue from "vue"; import App from "@/App.vue"; // import "core-js"; // import "regenerator-runtime/runtime"; Vue.config.productionTip = false; new Vue({ render: h => h(App) }).$mount("#app");// vue.config.js const webpack = require("webpack"); const path = require("path"); const resolve = dir => path.join(__dirname, dir); const IS_PROD = process.env.NODE_ENV !== "development"; const glob = require("glob"); const pagesInfo = require("./pages.config"); const pages = {}; glob.sync("./src/pages/**/main.js").forEach(entry => { let chunk = entry.match(/\.\/src\/pages\/(.*)\/main\.js/)[1]; const curr = pagesInfo[chunk]; if (curr) { pages[chunk] = { entry, ...curr, chunk: ["chunk-vendors", "chunk-common", chunk] }; } }); module.exports = { publicPath: "./", // 默认'/',部署应用包时的基本 URL // outputDir: process.env.outputDir || 'dist', // 'dist', 生产环境构建文件的目录 // assetsDir: "", // 相对于outputDir的静态资源(js、css、img、fonts)目录 configureWebpack: config => { config.externals = { vue: "Vue", "element-ui": "ELEMENT", "vue-router": "VueRouter", vuex: "Vuex", axios: "axios" }; }, // 禁止hash filenameHashing: false, chainWebpack: config => { // 修复HMR config.resolve.symlinks(true); config.plugin("ignore").use(new webpack.ContextReplacementPlugin(/moment[/\\]locale$/, /zh-cn$/)); // 添加别名 config.resolve.alias.set("@", resolve("src")); const cdn = { // 访问https://unpkg.com/element-ui/lib/theme-chalk/index.css获取最新版本 css: ["//unpkg.com/element-ui@2.10.1/lib/theme-chalk/index.css"], js: [ "//unpkg.com/vue@2.6.10/dist/vue.min.js", // 访问https://unpkg.com/vue/dist/vue.min.js获取最新版本 "//unpkg.com/vue-router@3.0.6/dist/vue-router.min.js", "//unpkg.com/vuex@3.1.1/dist/vuex.min.js", "//unpkg.com/axios@0.19.0/dist/axios.min.js", "//unpkg.com/element-ui@2.10.1/lib/index.js" ] }; // 防止多页面打包卡顿 config => config.plugins.delete("named-chunks"); // 多页面cdn添加 Object.keys(pagesInfo).forEach(page => { config.plugin(`html-${page}`).tap(args => { // html中添加cdn args[0].cdn = cdn; // 修复 Lazy loading routes Error args[0].chunksSortMode = "none"; return args; }); }); return config; }, pages, css: { extract: IS_PROD, sourceMap: false, loaderOptions: { scss: { // 向全局sass样式传入共享的全局变量, $src可以配置图片cdn前缀 // 详情: https://cli.vuejs.org/guide/css.html#passing-options-to-pre-processor-loaders // prependData: ` // @import "@/scss/variables.scss"; // @import "@/scss/mixins.scss"; // @import "@/scss/function.scss"; // $src: "${process.env.VUE_APP_OSS_SRC}"; // ` } } }, lintOnSave: false, runtimeCompiler: true, // 是否使用包含运行时编译器的 Vue 构建版本 productionSourceMap: !IS_PROD, // 生产环境的 source map parallel: require("os").cpus().length > 1 };
"serve": "vue-cli-service serve" 这样运行能正常显示和调试吗?
已经调通了