目录阐明
|-- public|-- src 我的项目开发目录 |-- api 接口目录 |-- request.js |-- api.js 接口 |-- assets 动态文件 |-- image |-- css |-- _variables.scss 全局sass变量定义文件 |-- js |-- config.js 全局js变量定义文件 |-- fieldParam.js 自定字段 |-- components 组件寄存目录 |-- i18n 国际化 |-- router router |-- meta.js route的配置文件 |-- store vuex |-- utils 自定工具 |-- views 视图目录 |-- App.vue 主入口 |-- main.js 主入口|-- package.json 依赖库|-- package-lock.json 锁定安装包的具体版本号|-- vue.config.js vue配置文件|-- .env 环境配置|-- .env.test |-- .env.production
vue.config.js
let path = require('path');let packageData = require('./package.json');let CompressionPlugin = require('compression-webpack-plugin');let timestamp = new Date().getTime();let staticDeclare = ``;let needPackage = !process.env.NODE_ENV.match('development');function resolve(dir) { return path.join(__dirname, dir)}if (needPackage) { staticDeclare = `${process.env.VUE_APP_STATIC_URL}/${process.env.VUE_APP_PACKAGE_DIR}/`;}module.exports = { publicPath: staticDeclare, // 动态资源加载的门路 outputDir: `${__dirname}/dist/${process.env.NODE_ENV}/${process.env.VUE_APP_CODE.toLowerCase()}`, // 打包的dist目录文件名 // indexPath: 'index.html', // 入口文件index.html的名字 // assetsDir: 'static', // img/fonts等不会变内容的资源的文件夹 productionSourceMap: false, chainWebpack: config => { //设置别名 config.resolve.alias .set('@', resolve('src')) }, devServer: { disableHostCheck: true, // 非localhost拜访时,绕过主机查看 host: 'dev.hostname.com', open: true, //关上浏览器窗口 proxy: { '/api/service': { target: 'http://test.hostname.com:9000', // 本地跨域拜访测试环境接口 changeOrigin: true, // 是否跨域 pathRewrite: { '/api/service': '', } }, } }, //定义scss全局变量 css: { loaderOptions: { sass: { prependData: `@import "@/assets/css/_variables.scss";` }, }, extract: { // ${staticDeclare}css/ filename: `css/[name]_${packageData.version}_${timestamp}.css`, chunkFilename: `css/[name]_${packageData.version}_${timestamp}.css` }, }, configureWebpack: () => { // 打包时压缩成gzip格局 if (needPackage) { return { plugins: [new CompressionPlugin({ test: /\.js$|\.html$|\.css/, threshold: 10240, deleteOriginalAssets: false })], output: { filename: `js/[name]_${packageData.version}_${timestamp}.js`, chunkFilename: `js/[name]_${packageData.version}_${timestamp}.js` }, // 此配置须要index.html文件配合减少引入内部框架,以减小打包的大小 externals: { 'vue': 'Vue', 'vuex': 'Vuex', 'vue-router': 'VueRouter', 'axios': 'axios', 'element-ui': 'ELEMENT' }, // externals中的key是用于import,value示意的在全局中拜访到该对象,就是window.echarts } } }}
index.html
<!DOCTYPE html><html lang="en"><head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <link rel="icon" href="<%= BASE_URL %>favicon.ico"> <title>declare</title></head><body> <noscript> <strong>We're sorry but declare doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> <strong>很道歉,如果未启用JavaScript,则网站无奈失常工作。请启用它以持续浏览。</strong> </noscript> <div id="app"></div> <!-- built files will be auto injected --> <% if (!process.env.NODE_ENV.match('development')) { %> <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.11/vue.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/vuex/3.2.0/vuex.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/vue-router/3.1.3/vue-router.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.19.2/axios.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/element-ui/2.13.1/index.js"></script> <% } %></body></html>