使用了同步方式的code splitting(配置),页面就显白了,也没有没错,不知道怎么回事,请求老师帮助。
来源:4-4 Webpack 和 Code Splitting(2)
他门说这就是人生
2019-10-17
我贴一下我的配置:
package.json:
{
"sideEffects": [
"*.css",
"*.scss",
"*.less"
],
"scripts": {
"dev": "webpack --config ./build/webpack.dev.js",
"serve": "webpack-dev-server --config ./build/webpack.dev.js",
"build": "webpack --config ./build/webpack.prod.js"
},
"devDependencies": {
"@babel/core": "^7.6.4",
"@babel/preset-env": "^7.6.3",
"animate.css": "^3.7.2",
"autoprefixer": "^9.6.4",
"axios": "^0.19.0",
"babel-loader": "^8.0.6",
"better-scroll": "^2.0.0-beta.2",
"bootstrap": "^4.3.1",
"bootstrap-notify": "^3.1.3",
"bootstrap-table": "^1.15.5",
"core-js": "^3.2.1",
"css-loader": "^3.2.0",
"ejs-loader": "^0.3.5",
"fibers": "^4.0.1",
"file-loader": "^4.2.0",
"html-loader": "^0.5.5",
"html-webpack-plugin": "^3.2.0",
"jquery": "^3.4.1",
"jquery-serializejson": "^2.9.0",
"less": "^3.10.3",
"less-loader": "^5.0.0",
"node-sass": "^4.12.0",
"popper.js": "^1.15.0",
"postcss-loader": "^3.0.0",
"sass": "^1.23.0",
"sass-loader": "^8.0.0",
"style-loader": "^1.0.0",
"url-loader": "^2.2.0",
"webpack": "^4.41.1",
"webpack-cli": "^3.3.9",
"webpack-dev-server": "^3.8.2",
"webpack-merge": "^4.2.2",
"ztree": "^3.5.24"
},
"dependencies": {
"@babel/polyfill": "^7.6.0",
"better-scroll": "^2.0.0-beta.2",
"core-js": "^3.2.1"
}
}.babelrc:
{
"presets": [
[
"@babel/preset-env",
{
"corejs": 3,
"useBuiltIns": "usage"
}
]
]
}webpack.common.js:
var HtmlWebpackPlugin = require('html-webpack-plugin');
var path = require("path")
module.exports = {
context: path.join(__dirname, "../src"),
entry: {
home: "../src/scripts/pages/home/index.js",
userManagement: '../src/scripts/pages/userManagement/index.js',
roleManagement: '../src/scripts/pages/roleManagement/index.js',
menuManagement: '../src/scripts/pages/menuManagement/index.js'
},
output: {
filename: "[name].js",
path: path.resolve(__dirname, "../src/main/resources/static")
},
module: {
rules: [
{
test: /\.html$/,
use: [
{
loader: 'html-loader',
options: {
minimize: true
}
}
]
},
{
test: /\.(css)$/,
use: [
{
loader: 'style-loader', // inject CSS to page
},
{
loader: 'css-loader', // translates CSS into CommonJS modules
options: {
//默认全局,想用局部的地方自己加:local
modules: 'global'
}
},
{
loader: 'postcss-loader', // Run postcss actions
options: {
plugins: function () { // postcss plugins, can be exported to postcss.config.js
return [
require('autoprefixer')
];
}
}
}
]
},
{
test: /\.(scss)$/,
use: [
{
loader: 'style-loader', // inject CSS to page
},
{
loader: 'css-loader', // translates CSS into CommonJS modules
options: {
modules: false
}
},
{
loader: 'postcss-loader', // Run postcss actions
options: {
plugins: function () { // postcss plugins, can be exported to postcss.config.js
return [
require('autoprefixer')
];
}
}
},
{
loader: 'sass-loader' // compiles Sass to CSS
}
]
},
{
test: /\.(less)$/,
use: [
{
loader: 'style-loader', // inject CSS to page
},
{
loader: 'css-loader', // translates CSS into CommonJS modules
options: {
modules: false
}
},
{
loader: 'postcss-loader', // Run postcss actions
options: {
plugins: function () { // postcss plugins, can be exported to postcss.config.js
return [
require('autoprefixer')
];
}
}
},
{
loader: 'less-loader' // compiles Sass to CSS
}
]
},
{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader"
},
{
test: /\.(png|jpg|gif)$/,
use: [
{
loader: 'url-loader',
options: {
//10KB以下则打包成DataURL,不打包成文件
limit: 10240,
useRelativePath: true
}
}
]
},
{
test: /\.(woff|woff2|eot|ttf|otf)$/,
use: [
{
loader: 'file-loader',
options: {}
}
]
}
]
},
optimization: {
usedExports: true,
// splitChunks: {
// chunks: 'all'
// }
},
plugins: [
new HtmlWebpackPlugin({
filename: "home.html",
template: "../src/scripts/pages/home/template.html",
meta: {
'viewport': 'width=device-width, initial-scale=1, shrink-to-fit=no'
},
chunks: ['home']
}),
new HtmlWebpackPlugin({
filename: "userManagement.html",
template: "../src/scripts/pages/userManagement/template.html",
meta: {
'viewport': 'width=device-width, initial-scale=1, shrink-to-fit=no'
},
chunks: ['userManagement']
}),
new HtmlWebpackPlugin({
filename: "roleManagement.html",
template: "../src/scripts/pages/roleManagement/template.html",
meta: {
'viewport': 'width=device-width, initial-scale=1, shrink-to-fit=no'
},
chunks: ['roleManagement']
}),
new HtmlWebpackPlugin({
filename: "menuManagement.html",
template: "../src/scripts/pages/menuManagement/template.html",
meta: {
'viewport': 'width=device-width, initial-scale=1, shrink-to-fit=no'
},
chunks: ['menuManagement']
})
]
}webpack.dev.js
var merge = require('webpack-merge');
var commonConfig = require('./webpack.common');
var path = require("path");
const devConfig = {
mode: "development",
devtool: "cheap-module-eval-source-map",
devServer: {
publicPath: "/",
contentBase: "../src/main/resources/static",
filename: "[name].js",
port: 8080
}
};
module.exports = merge(commonConfig, devConfig);webpack.prod.js:
var merge = require('webpack-merge');
var commonConfig = require('./webpack.common');
var path = require("path");
const prodConfig = {
mode: "production",
devtool: "cheap-module-source-map"
};
module.exports = merge(commonConfig, prodConfig);其中,我用npm run dev是正常的,用npm run build的话,axios就不请求了, chrome控制台和webpack控制台都没有报错,

只是wepack控制台有一些警告:
WARNING in asset size limit: The following asset(s) exceed the recommended size limit (244 KiB). This can impact web performance. Assets: home.js (370 KiB) menuManagement.js (456 KiB) roleManagement.js (456 KiB) userManagement.js (456 KiB) WARNING in entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (244 KiB). This can impact web performance. Entrypoints: home (370 KiB) home.js userManagement (456 KiB) userManagement.js roleManagement (456 KiB) roleManagement.js menuManagement (456 KiB) menuManagement.js WARNING in webpack performance recommendations: You can limit the size of your bundles by using import() or require.ensure to lazy load some parts of your application. For more info visit https://webpack.js.org/guides/code-splitting/
我用的后端是Java,所以使用Tomcat部署的,把cnpm run build的代码编译到java项目,运行后台axios不发请求,如图:

请老师帮我看看吧,谢谢!
ps:
附上加载当前用户和菜单的js代码:
import '../../../global/js/jQuery/jquery-vendor'
import axios from 'axios'
import 'bootstrap-notify'
import {myUI} from '../../../global/js/utils/common'
import sideNavCss from '../css/index.css'
import BScroll from 'better-scroll'
console.log(sideNavCss)
$(function () {
//返回认证信息(如用户名)和进行权限控制
axios.get('/authentication').then(function (value) {
if (value.code === 0) {
//显示用户名
$('.userInfo .username').text(value.data.name)
//显示电子邮箱
axios.get('/user/name/' + value.data.name).then(result => {
$('.userInfo .email').text(result.email)
}).catch((reason) => {
console.error(reason)
});
//显示菜单
axios.get(`/menu/user/${value.data.name}/recursive`).then(result => {
// console.log(result)
let loadMenuRecursive = function (result) {
let ul = document.createElement('ul');
for (let i = 0; i < result.length; i++) {
let menu = result[i];
let li = document.createElement('li');
let link = document.createElement('a');
if (menu.url) {
link.href = menu.url;
//经理要求把/index页面隐藏了
if (menu.url === '/index') {
link.style.display = 'none';
}
} else {
link.href = 'javascript:void(0);';
}
if (location.pathname.startsWith(menu.url)) {
link.classList.add('active');
}
link.innerText = menu.name;
li.appendChild(link);
if (menu.children.length) {
let subMenu = loadMenuRecursive(menu.children);
li.appendChild(subMenu);
}
ul.appendChild(li);
}
return ul;
}
let allMenu = loadMenuRecursive(result);
new Promise((resolve, reject) => {
try {
allMenu.classList.add('navigation', 'content');
document.querySelector(`.${sideNavCss.sideNav} .wrapper`).appendChild(allMenu);
resolve();
} catch (e) {
reject(e);
}
}).then(() => {
let activeLink = $('.navigation.content li a.active');
activeLink.parentsUntil('.navigation.content').not('li').show('slow');
$('.navigation.content li a').click(function (evt) {
console.log($(this).parents('.navigation.content > li').siblings())
$(this).parents('.navigation.content > li').siblings('li').find('ul').hide('fast');
$(this).next('ul').show('slow');
});
let scroll = new BScroll(document.querySelector(`.${sideNavCss.sideNav} .wrapper`), {
mouseWheel: {
speed: 20,
invert: false,
easeTime: 300
}
})
window.addEventListener('resize', function (evt) {
scroll.refresh()
})
}).catch(reason => {
console.error(reason)
})
}).catch(reason => {
console.error(reason)
})
} else {
myUI.notify(value.msg + value.data, 'danger');
}
}).catch(function (reason) {
console.error(reason)
});
});写回答
1回答
-
控制台也不报错?
092019-11-11
相似问题