怎么配置vue才可以让他在修改devServer的后台地址时不需要再次重启项目?
这是我现在vue.config.js
的配置。
我看别人的项目有config文件夹,那个是需要弄得吗?
现在的目录结构:
const path = require("path");
const Timestamp = new Date().getTime();
// const selfSigned = require('openssl-self-signed-certificate');
module.exports = {
// type :string defalut :"/"
// 把开发服务器架设在根路径
// publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
// type :string defalut :"dist"
// 打包后的文件夹名字
outputDir: "dist",
// type :string defalut :""
// 静态资源目录
assetsDir: "assets",
// 生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存
filenameHashing: true,
// 设置单页面与多页面
// 具体情况看官网 https://cli.vuejs.org/zh/config/#pages
pages: {
index: {
// page 的入口
entry: "src/main.js",
// 模板来源
template: "public/index.html",
// 在 dist/index.html 的输出
filename: "index.html",
// 当使用 title 选项时,
// template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
title: "调控云数据校核系统",
// 在这个页面中包含的块,默认情况下会包含
// 提取出来的通用 chunk 和 vendor chunk。
chunks: ["chunk-vendors", "chunk-common", "index"]
}
},
// eslint-loader 是否在保存的时候检查
lintOnSave: true,
// 是否使用包含运行时编译器的Vue核心的构建
runtimeCompiler: false,
// 默认情况下 babel-loader 忽略其中的所有文件 node_modules
transpileDependencies: [],
// 生产环境 sourceMap
productionSourceMap: false,
// cors 相关 https://jakearchibald.com/2017/es-modules-in-browsers/#always-cors
// corsUseCredentials: false,
// webpack 配置,键值对象时会合并配置,为方法时会改写配置
// https://cli.vuejs.org/guide/webpack.html#simple-configuration
// configureWebpack: (config) => {},
configureWebpack: {
// webpack 配置
output: {
// 输出重构 打包编译后的 文件名称 【模块名称.版本号.时间戳】
// filename: `js/[name].${process.env.VUE_APP_Version}.${Timestamp}.js`,
// chunkFilename: `js/[name].${process.env.VUE_APP_Version}.${Timestamp}.js`,
filename: `js/[name].${Timestamp}.js`,
chunkFilename: `js/[name].${Timestamp}.js`
},
// plugins: [
// new CopyWebpackPlugin({
// patterns: [
// {
// from: "./public/static",
// to: `static_${timesTamp}`
// }
// ]
// })
// ]
},
// webpack 链接 API,用于生成和修改 webapck 配置
// https://github.com/mozilla-neutrino/webpack-chain
// chainWebpack: (config) => {
// // 因为是多页面,所以取消 chunks,每个页面只对应一个单独的 JS / CSS
// config.optimization.splitChunks({
// cacheGroups: {},
// });
// // 'src/lib' 目录下为外部库文件,不参与 eslint 检测
// config.module
// .rule("eslint")
// .exclude.add("/Users/maybexia/Downloads/FE/community_built-in/src/lib")
// .end();
// },
// 配置高于chainWebpack中关于 css loader 的配置
// 具体细节查看 https://cli.vuejs.org/zh/guide/webpack.html#链式操作(高级)
css: {
// 是否开启支持 foo.module.css 样式
// modules: false, // 已被弃用
// 是否使用 css 分离插件 ExtractTextPlugin,采用独立样式文件载入,不采用 <style> 方式内联至 html 文件中
// extract: true, // 这个属性把style提取至独立的css文件了,而不是动态注入javascipt中。会导致页面不自动刷新
// 是否构建样式地图,false 将提高构建速度
sourceMap: false,
loaderOptions: {
less: {
javascriptEnabled: true
}
}
},
// 开发配置
// 细节查看 https://webpack.js.org/configuration/dev-server/#devserver
devServer: {
open: true,
hot: true,
host: "127.0.1.1",
port: "8383",
// https: true,
// https: {
// key: selfSigned.key,
// cert: selfSigned.cert
// },
// historyApiFallback: true,
// https: false, // 这是前台模拟的 https ,真正的是 后台在服务器配置 https
// proxy: "http://192.168.3.xxx:xxx",
proxy: {
"/": {
target: "http://192.168.xx.xxx:8888", // 代理接口 (注意只要域名就够了)
changeOrigin: true, // 是否在本机创建target地址的虚拟服务,避免跨域问题
// logLevel: 'debug', // 是否为调试
pathRewrite: {
"^/": "/" //代理路径
}
}
}
},
// 构建时开启多进程处理 babel 编译
parallel: require("os").cpus().length > 1,
// https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa
pwa: {},
// 第三方插件配置
pluginOptions: {
"style-resources-loader": {
preProcessor: "less",
patterns: [path.resolve(__dirname, "src/assets/less/global.less")]
// injector: 'append' // 'prepend' 或者 'append' 表示资源导入的位置,在之前还是之后
}
},
// 做预览本地pdf webpack 不认识pdf文件,要处理
chainWebpack: config => {
const fileRule = config.module.rule("file");
fileRule.uses.clear();
fileRule
.test(/\.pdf|ico$/)
.use("file-loader")
.loader("file-loader")
.options({
limit: 10000
});
}
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
理论上是可以实现的,就是比较麻烦。与投入比较起来,解决的是一个不紧急的需求,投入产出比不高。
实际有更简单的办法,使用nginx代理,devServer代理到nginx,nginx代理到动态的api网站,修改配置文件后,重启nginx(这一步也可以做成自动化,使用nodemoon监视配置文件,变动时用fs修改nginx配置,再通过child_process重启nginx)devServer可以毫无感知。
本来就需要重启喔,最多也只是
run dev / run test
取不同的配置而已在main.js设置
config/env.development.js
config/index.js
赞成 redbuck 的回答,理论上是能实现的。
类似的还有需求场景很多呀,基本上配置相关的内容修改之后都需要重启。那么方案想起来就有如下几种
router
、Rewrite
支持。(看上去只能通过钩子了)npm run start
换成另一个服务,然后 watch 所有配置文件,有更新就自动重启项目。(watch 千万别加 src 目录,不然光重启了。思路来源于 pm2 )如果是后台地址改变了,不想重启前端代码并打包,可以做下面配置
1、在static文件夹新建一个config.js,打包后生成的相同名文件夹,更改里面值就可以了
window.global_config = {
BASE_URL: ' http://xx.xx.x.x:9000'
};
2、在index.html文件里引入config.js
3、封装的axios里的baseURL写成global_config.BASE_URL
const service = axios.create({
baseURL: global_config.BASE_URL, // api 的 base_url
timeout: 20000 // 请求超时时间
})
我遇到了类似的问题,https://blog.csdn.net/weixin_... 参考这个方法解决了,希望能帮到你。