zoukankan      html  css  js  c++  java
  • 基于vue2.0的后管系统(配置篇)

    一些项目依赖package.json

     1 {
     2   "name": "frontend",
     3   "description": "tssp based on vue2.0 frame",
     4   "version": "1.0.0",
     5   "author": "tom.h@vipshop.com",
     6   "private": true,
     7   "scripts": {
     8     "dev": "et -c element-variables.scss -o element-ui && cross-env NODE_ENV=development webpack --progress --hide-modules --config config/webpack.tssp.config.js",
     9     "start": "cross-env NODE_ENV=development webpack-dev-server --inline --hot --config config/webpack.tssp.config.js",
    10     "uattest": "et -c element-variables.scss -o element-ui && node config/removefile.js && cross-env NODE_ENV=uat webpack --progress --hide-modules --config config/webpack.tssp.config.js",
    11     "pretest": "et -c element-variables.scss -o element-ui && node config/removefile.js && cross-env NODE_ENV=pre webpack --progress --hide-modules --config config/webpack.tssp.config.js",
    12     "sittest": "et -c element-variables.scss -o element-ui && node config/removefile.js && cross-env NODE_ENV=sit webpack --progress --hide-modules --config config/webpack.tssp.config.js",
    13     "build": "et -c element-variables.scss -o element-ui && node config/removefile.js && cross-env NODE_ENV=production webpack --progress --hide-modules --config config/webpack.tssp.config.js"
    14   },
    15   "dependencies": {
    16     "axios": "^0.17.1",
    17     "babel-polyfill": "6.23.0",
    18     "echarts": "^4.1.0",
    19     "font-awesome": "^4.7.0",
    20     "qs": "^6.5.1",
    21     "vue": "2.5.0",
    22     "vue-progressbar": "^0.7.2",
    23     "vue-router": "2.3.1",
    24     "vuebar": "0.0.4",
    25     "vuex": "2.2.1"
    26   },
    27   "babel": {
    28     "presets": [
    29       "es2015",
    30       "stage-3"
    31     ],
    32     "ignore": [
    33         "./static/particles.js",
    34         "./static/jsencrypt.min.js"
    35       ]
    36   },
    37   "devDependencies": {
    38     "babel-core": "^6.24.0",
    39     "babel-loader": "^6.4.1",
    40     "babel-preset-es2015": "^6.24.0",
    41     "babel-preset-stage-3": "^6.22.0",
    42     "copy-webpack-plugin": "^4.0.1",
    43     "cross-env": "^3.2.4",
    44     "css-loader": "^0.27.3",
    45     "element-theme": "^2.0.1",
    46     "element-theme-chalk": "git+https://github.com/ElementUI/theme-chalk.git",
    47     "element-theme-default": "1.3.6",
    48     "element-ui": "^2.4",
    49     "express": "^4.16.2",
    50     "express-proxy-mock": "^1.2.13",
    51     "extract-text-webpack-plugin": "^2.1.0",
    52     "file-loader": "^0.10.1",
    53     "gulp": "^3.9.1",
    54     "gulp-git": "^2.2.0",
    55     "gulp-util": "^3.0.8",
    56     "html-webpack-plugin": "^2.28.0",
    57     "js-cookie": "^2.2.0",
    58     "node-sass": "^4.5.0",
    59     "postcss-css-variables": "0.7.0",
    60     "postcss-cssnext": "2.10.0",
    61     "postcss-import": "9.1.0",
    62     "postcss-loader": "1.3.3",
    63     "rimraf": "2.6.2",
    64     "sass-loader": "^5.0.1",
    65     "sass-resources-loader": "^1.3.1",
    66     "vue-lazy-render": "^1.0.20",
    67     "vue-loader": "11.3.4",
    68     "vue-style-loader": "2.0.5",
    69     "vue-template-compiler": "2.5.0",
    70     "webpack": "^2.2.1",
    71     "webpack-dev-server": "^2.4.2",
    72     "webpack-merge": "^2.6.1"
    73   }
    74 }

    一些打包脚本

    "scripts": {
        "dev": "et -c element-variables.scss -o element-ui && cross-env NODE_ENV=development webpack --progress --hide-modules --config config/webpack.tssp.config.js",
        "start": "cross-env NODE_ENV=development webpack-dev-server --inline --hot --config config/webpack.tssp.config.js",
        "uattest": "et -c element-variables.scss -o element-ui && node config/removefile.js && cross-env NODE_ENV=uat webpack --progress --hide-modules --config config/webpack.tssp.config.js",
        "pretest": "et -c element-variables.scss -o element-ui && node config/removefile.js && cross-env NODE_ENV=pre webpack --progress --hide-modules --config config/webpack.tssp.config.js",
        "sittest": "et -c element-variables.scss -o element-ui && node config/removefile.js && cross-env NODE_ENV=sit webpack --progress --hide-modules --config config/webpack.tssp.config.js",
        "build": "et -c element-variables.scss -o element-ui && node config/removefile.js && cross-env NODE_ENV=production webpack --progress --hide-modules --config config/webpack.tssp.config.js"
      },

    script解读:

    et -c element-variables.scss -o element-ui  打包本地配置好的elementUI样式
    cross-env NODE_ENV=development 将环境变量改成不同的值,对应不同模式的打包
    webpack --progress --hide-modules --config config/webpack.tssp.config.js    根据config文件夹中的webpack.tssp.config.js配置打包文件,显示进度
    webpack-dev-server --inline --hot --config config/webpack.tssp.config.js  启动webpack服务,开启热更新

    babel解读:

    "babel": {
        "presets": [
          "es2015",
          "stage-3"
        ],
        "ignore": [
            "./static/particles.js",
            "./static/jsencrypt.min.js"
          ]
      },
    "presets": [ "es2015", "stage-3"] 将代码打包成es2015和stage-3

    "ignore": ["./static/particles.js","./static/jsencrypt.min.js"] 忽略转义某些文件,一些库的脚本转义后会报错,故用之

    webpack配置

    webpack.tssp.config.js

      1 const path = require('path');
      2 const webpack = require('webpack');
      3 const cssnext = require('postcss-cssnext');
      4 const atImport = require('postcss-import');
      5 const cssvariables = require('postcss-css-variables');
      6 const ExtractTextPlugin = require('extract-text-webpack-plugin');
      7 const HtmlWebpackPlugin = require('html-webpack-plugin');
      8 const CopyWebpackPlugin = require('copy-webpack-plugin');
      9 
     10 
     11 const devSrc = 'http://localhost:8099/static/';
     12 const devOutputPath = '../dist/static';
     13 const prodSrc = './static/';
     14 const prodOutputPath = '../dist/static';
     15 
     16 const Util = require('./util')
     17 
     18 const PATH_DIST = {
     19     font: 'font/',
     20     img: 'image/',
     21     css: 'css/',
     22     js: 'js/',
     23     root:'../'
     24 };
     25 const isProduction = process.env.NODE_ENV !== 'development'; //环境,dev、production
     26 const BASE_API_MAP = {
     27     "development": '""',
     28     "uat": '"http://11.114.0.12:8050/nfsm-uat/"',
     29     "sit": '"http://11.114.0.12:8050/nfsm-sit/"',
     30     "pre": '"http://11.111.1.5:8050/nfsm-pre/"',
     31     "production": '"http://22.231.1.5:10080/nfsm/"'
     32 }
     33 const UPLOADFILE_MAP = {
     34     "development": '"http://11.114.0.12:8050/nfsm-sit/"',
     35     "uat": '"http://11.114.0.12:8050/nfs-uat"',
     36     "sit": '"http://11.114.0.12:8050/nfs-sit"',
     37     "pre": '"http://11.111.1.5:8050/nfs-pre"',
     38     "production": '"http://22.231.1.5:10080/nfs"'
     39 }
     40 const proxyHost = 'http://11.114.0.12:8050/nfsm-sit/';
     41 
     42 const host = isProduction ? prodSrc : devSrc;
     43 const outputPath = isProduction ? prodOutputPath : devOutputPath;
     44 const extractElementUI = new ExtractTextPlugin(PATH_DIST.css + 'element.css' + (isProduction ? '?[contenthash:8]' : ''));
     45 const extractCSS = new ExtractTextPlugin(PATH_DIST.css + 'app.css' + (isProduction ? '?[contenthash:8]' : ''));
     46 
     47 module.exports = function (env) {
     48     let Config = {
     49         entry: {
     50             element: ['element-ui'],
     51             vue: ['vue', 'axios', 'vue-router', 'vuex'],
     52             app: './src/main.js'
     53         },
     54         output: {
     55             path: path.resolve(__dirname, outputPath),
     56             publicPath: host,
     57             filename: PATH_DIST.js + '[name].js' + (isProduction ? '?[chunkhash:8]' : '')
     58         },
     59         module: {
     60             rules: [{
     61                     test: /.vue$/,
     62                     loader: 'vue-loader',
     63                     options: {
     64                         loaders: {
     65                             scss: Util.generateSassResourceLoader(),
     66                             sass: Util.generateSassResourceLoader(),
     67                             css: extractCSS.extract({
     68                                 use: 'css-loader!postcss-loader',
     69                                 fallback: 'vue-style-loader'
     70                             })
     71                         }
     72                     }
     73                 },
     74                 {
     75                     test: function (path) {
     76                         if (/.css$/.test(path) && (/element-ui/).test(path)) {
     77                             console.log(path)
     78                             return true;
     79                         } else {
     80                             return false;
     81                         }
     82                     },
     83                     loader: extractElementUI.extract({
     84                         use: 'css-loader!postcss-loader'
     85                     })
     86                 },
     87                 {
     88                     test: function (path) {
     89                         if (/.css$/.test(path) && !(/element-ui/).test(path)) {
     90                             return true;
     91                         } else {
     92                             return false;
     93                         }
     94                     },
     95                     loader: extractCSS.extract({
     96                         use: 'css-loader!postcss-loader'
     97                     })
     98                 },
     99                 {
    100                     test: /.js$/,
    101                     loader: 'babel-loader',
    102                     exclude: /node_modules/
    103                 },
    104                 {
    105                     test: /.(woff|svg|eot|ttf)??.*$/, //字体文件
    106                     loader: 'file-loader',
    107                     options: {
    108                         publicPath: '../font/',
    109                         outputPath: PATH_DIST.font,
    110                         name: '[name].[ext]'
    111                     }
    112                 },
    113                 {
    114                     test: /.(gif|jpg|png|ico)??.*$/, //图片
    115                     loader: 'file-loader',
    116                     options: {
    117                         name: PATH_DIST.img + '[name].[ext]'
    118                     }
    119                 },
    120                 {
    121                     test: /.scss$/,
    122                     use: Util.generateSassResourceLoader()
    123                 },
    124                 {
    125                     test: /.sass/,
    126                     use: Util.generateSassResourceLoader()
    127                 },
    128 
    129             ]
    130         },
    131         plugins: [
    132             new webpack.optimize.CommonsChunkPlugin({
    133                 name: ['element', 'vue']
    134             }),
    135             extractElementUI,
    136             extractCSS,
    137             // copy custom static assets
    138             new CopyWebpackPlugin([{
    139                 from: path.resolve(__dirname, '../static'),
    140                 to: '',
    141                 ignore: ['.*']
    142             }]),
    143             new webpack.LoaderOptionsPlugin({
    144                 options: {
    145                     postcss: function () {
    146                         return [atImport({
    147                             path: [path.resolve(__dirname, '../src')]
    148                         }), cssnext, cssvariables];
    149                     }
    150                 },
    151                 minimize: isProduction
    152             }),
    153             new HtmlWebpackPlugin({
    154                 title: '消息推送平台',
    155                 template: 'index.html',
    156                 filename: '../index.html',
    157                 inject: false,
    158                 path: host,
    159                 chunks: ['element', 'vue', 'app']
    160             }),
    161             new webpack.DefinePlugin({
    162                 'process.env.NODE_ENV': isProduction ? '"production"' : '"development"',
    163                 'process.env.BASE_API': BASE_API_MAP[process.env.NODE_ENV],
    164                 'process.env.UPLOADFILE': UPLOADFILE_MAP[process.env.NODE_ENV]
    165             }),
    166         ],
    167         performance: {
    168             hints: isProduction ? 'warning' : false
    169         },
    170         devtool: isProduction ? false : '#eval-source-map',
    171         resolve: {
    172             alias: {
    173                 'src': path.resolve(__dirname, '../src'),
    174                 '@': path.resolve(__dirname, '../src'),
    175                 'lib': path.resolve(__dirname, '../static'),
    176                 'scss': path.resolve(__dirname, '../src/scss/')
    177             },
    178             extensions:[".js"]
    179         }
    180     };
    181 
    182     if (isProduction) {
    183         Config.plugins = Config.plugins.concat([
    184             new webpack.optimize.UglifyJsPlugin({
    185                 sourceMap: true,
    186                 compress: {
    187                     warnings: false
    188                 }
    189             })
    190         ]);
    191     } else {
    192         let context = ['/auth', '/myAccount', '/user', '/role', '/resource', '/task', '/enum', '/draft', '/customerLabel','/accessChannel']
    193         Config.devServer = {
    194             historyApiFallback: true,
    195             publicPath: '/static/',
    196             disableHostCheck: true,
    197             noInfo: true,
    198             hot: true,
    199             host: 'localhost',
    200             proxy: [{
    201                 context: context,
    202                 //target: 'http://11.112.0.100:9750',
    203                 target: proxyHost,
    204                 changeOrigin: true,
    205                 secure: false
    206             }/* , {
    207                 context: '/file',
    208                 target: 'http://11.112.0.100:9742',
    209                 changeOrigin: true,
    210                 secure: false
    211             } */],
    212             port: 8099,
    213             watchOptions: {
    214                 poll: false,
    215                 ignored: ['node_modules/**', 'config/**', 'common/**', 'dist/**']
    216             },
    217             headers: {
    218                 'Access-Control-Allow-Origin': '*'
    219             }
    220         };
    221     }
    222     return Config;
    223 };
    
    



  • 相关阅读:
    Shiro认证过程?
    使用过Redis做异步队列么,你是怎么用的?
    使用 Spring Boot有什么好处
    Spring Boot、Spring MVC 和 Spring 有什么区别?
    es
    python并发编程
    Go基础05
    Go04基础
    Go03基础
    Go基础02
  • 原文地址:https://www.cnblogs.com/peace1/p/vueProjectSystem_1.html
Copyright © 2011-2022 走看看