vue创建项目,使用element-ui,使用scss,编译ES6,使用axios,

Vue项目搭建与打包指南
本文详细介绍如何使用Vue-CLI全局安装脚手架,创建基于Webpack的Vue项目,并配置Element-UI、Axios等常用库。同时,文章还提供了解决打包后静态资源路径错误及Element-UI图标不显示问题的方法。

如果未安装脚手架,请先全局安装,如若安装请忽略

npm install --global vue-cli

创建一个基于webpack的新项目(myProject)

vue init webpack myProject

切换到项目目录,我这里直接是cd myProject

npm run dev运行成功

 

安装element-ui,更多请查看官网https://element.faas.ele.me/#/zh-CN/component/installation

npm i element-ui -S

下载后mian.js的配置:

        import ElementUI from 'element-ui';

        import 'element-ui/lib/theme-chalk/index.css';

        Vue.use(ElementUI);

安装axios(类似于ajax)更多请查看官网https://www.kancloud.cn/yunye/axios/234845

npm install axios

安装scss,

cnpm install node-sass --save-dev 

cnpm install sass-loader --save-dev

    提示:使用cnpm安装,当前本人安装的sass-loader最新版本为8.0.1,需要降低版本,本人降低版本为7.3.1,否则会报错(此方法不需要另外配置其他文件)

安装ES6编译器

npm install babel-polyfill --save-dev

在main.js中引入 import 'babel-polyfill'

 

 

打包问题

    不修改配置的情况下打包会出现两种问题

         1.打包完成后会出现css,js引入地址不对,这时候需要修改config文件下的index.js,如下:

build: {
    // Template for index.html
    index: path.resolve(__dirname, '../dist/index.html'),

    // Paths
    assetsRoot: path.resolve(__dirname, '../dist'),
    assetsSubDirectory: 'static',


    assetsPublicPath: './',//此处是我修改后的,可以解决打包后引入静态资源的问题

    /**
     * Source Maps
     */

    productionSourceMap: false,//此处本身是true,是否生成map文件


    // https://webpack.js.org/configuration/devtool/#production
    devtool: '#source-map',

    // Gzip off by default as many popular static hosts such as
    // Surge or Netlify already gzip all static assets for you.
    // Before setting to `true`, make sure to:
    // npm install --save-dev compression-webpack-plugin
    productionGzip: false,
    productionGzipExtensions: ['js', 'css'],

    // Run the build command with an extra argument to
    // View the bundle analyzer report after build finishes:
    // `npm run build --report`
    // Set to `true` or `false` to always turn it on or off
    bundleAnalyzerReport: process.env.npm_config_report
  }

       2.打包后你或许会遇到element-ui的图标不显示,这时候需要修build文件下的utils.js,如下

if (options.extract) {
      return ExtractTextPlugin.extract({
        use: loaders,
        fallback: 'vue-style-loader',
        publicPath:'../../'    //此处是我新增,可以解决图标不显示问题
      })
    } else {
      return ['vue-style-loader'].concat(loaders)
    }

 

<think>好的,我现在需要帮助用户解决如何基于指定的前端技术栈开发一个包含跨公司人才搜寻和内部人才管理模块的Java Web系统。首先,我得理清用户的需求。用户提到的技术栈包括Vue CLI4.5.19、Vue2.7.16,以及相关的库如axiosvuex、vue-router和element-ui。后端是JavaWeb,但用户主要关注前端部分的实现。首先,我应该考虑项目的整体架构。Vue CLI适合作为前端工程的脚手架,可以快速初始化项目结构。然后需要划分模块,即跨公司人才搜寻和内部管理。这两个模块可能需要不同的路由和组件结构,所以使用vue-router来管理路由是合理的。状态管理方面,vuex可以帮助共享数据,比如用户登录状态或搜索条件。 接下来,组件设计。跨公司搜索可能需要一个搜索表单,使用element-ui的输入框、下拉选择器和按钮组件。结果展示可能需要表格或卡片列表,element-ui的表格组件很适合。内部管理模块可能需要更复杂的CRUD操作,表格带有编辑和删除功能,同样可以用element-ui的组件实现。数据交互方面,axios用于发送HTTP请求到后端Java接口。需要统一封装axios实例,设置基地址和拦截器处理请求和响应,比如添加token到请求头,或者统一处理错误。另外,API接口需要模块化管理,分开跨公司搜索和内部管理的接口。 权限控制也是关键。使用vue-router的导航守卫来检查用户是否有权限访问某些路由。结合vuex中的用户角色信息,动态加载路由或限制访问。 然后,具体实现步骤。初始化项目使用VueCLI,安装依赖项。配置vue-router,定义两个模块的路由。创建vuexstore,管理用户状态和搜索数据。开发组件时,按功能划分,复用公共组件如搜索栏、表格。样式方面,可以用SCSS或LESS,保持一致性。测试部分需要考虑单元测试和端到端测试,但用户可能更关注功能实现,所以这部分可以简要提及。最后,部署到生产环境,配置Webpack优化打包。 可能遇到的问题包括跨域请求,需要在后端配置CORS,或者前端代理。还有状态持久化,比如页面刷新后vuex数据丢失,可以用localStorage解决。组件间的通信,尤其是复杂的数据传递,可能需要使用vuex而不是props/emit。用户可能还关心如何与后端接口对接,比如数据格式、分页处理、错误处理等。需要确保axios拦截器能够处理常见的401错误,跳转到登录页面。同时,element-ui的组件需要按需引入,减少打包体积。 最后,生成相关问题,考虑用户后续可能遇到的优化、权限管理、性能问题,以及如何扩展功能。</think>### 基于Vue技术栈的人才管理系统实现方案 #### 一、项目架构设计 ```bash # 使用Vue CLI创建项目(需先全局安装@vue/cli 4.5.19) vue create talent-system --preset default ``` 1. **模块划分** ```javascript // src/router/index.js export default new VueRouter({ routes: [ { path: '/cross-search', component: CrossSearch }, { path: '/internal-manage', component: InternalManage }, { path: '/talent-detail/:id', component: TalentDetail } ] }) ``` 2. **状态管理架构** ```javascript // src/store/modules/search.js export default { state: { searchFilters: {}, searchResults: [] }, mutations: { SET_FILTERS(state, filters) { state.searchFilters = Object.freeze(filters) } } } ``` #### 二、核心功能实现 1. **跨公司人才搜索模块** ```vue <template> <el-form @submit.native.prevent="handleSearch"> <el-input v-model="keywords" placeholder="技能/职位"></el-input> <el-select v-model="industry" multiple> <el-option v-for="item in industries" :key="item.value"></el-option> </el-select> <el-button type="primary" native-type="submit">搜索</el-button> </el-form> <el-table :data="results"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="skills" :formatter="formatSkills"></el-table-column> </el-table> </template> <script> export default { data() { return { keywords: '', industry: [] } }, methods: { async handleSearch() { try { const { data } = await this.$api.search.fetchCrossCompanyTalents({ keywords: this.keywords, industries: this.industry }) this.$store.commit('search/SET_RESULTS', data) } catch (error) { this.$message.error('搜索失败') } } } } </script> ``` 2. **公司内部人才管理模块 ```javascript // src/api/internal.js export default { fetchInternalTalents: (params) => axios.get('/api/internal/talents', { params }), updateTalentInfo: (data) => axios.patch(`/api/internal/talents/${data.id}`, data) } ``` #### 三、关键技术实现 1. **Axios封装** ```javascript // src/utils/request.js const service = axios.create({ baseURL: process.env.VUE_APP_API_BASE, timeout: 10000 }) service.interceptors.request.use(config => { config.headers['Authorization'] = `Bearer ${store.state.user.token}` return config }) service.interceptors.response.use( response => response.data, error => { if (error.response.status === 401) { router.push('/login') } return Promise.reject(error) } ) ``` 2. **权限控制实现** ```javascript // src/router/permission.js router.beforeEach((to, from, next) => { const hasPermission = store.getters['user/checkPermission'](to.meta.roles) hasPermission ? next() : next('/403') }) ``` #### 四、最佳实践建议 1. **组件复用策略** ```vue <!-- src/components/Common/SearchPanel.vue --> <template> <div class="search-panel"> <slot name="prepend"></slot> <el-input v-bind="$attrs"></el-input> <slot name="append"></slot> </div> </template> ``` 2. **性能优化方案** ```javascript // vue.config.js module.exports = { chainWebpack: config => { config.plugin('preload').tap(options => { options[0].include = 'all' return options }) } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值