zhouna 6 jaren geleden
bovenliggende
commit
aa6661b1ed
11 gewijzigde bestanden met toevoegingen van 305 en 0 verwijderingen
  1. 3 0
      config.js
  2. 17 0
      dev-server.js
  3. 55 0
      package.json
  4. 15 0
      server.js
  5. 17 0
      src/App.vue
  6. 9 0
      src/index.html
  7. 12 0
      src/index.js
  8. 4 0
      src/index.less
  9. 83 0
      webpack.common.js
  10. 20 0
      webpack.dev.js
  11. 70 0
      webpack.prod.js

+ 3 - 0
config.js

@@ -0,0 +1,3 @@
+module.exports = {
+  host:'http://192.168.2.236:5050',      //后台接口地址
+};

+ 17 - 0
dev-server.js

@@ -0,0 +1,17 @@
+const webpackDevServer = require('webpack-dev-server');
+const webpack = require('webpack');
+
+const config = require('./webpack.config.js');
+const options = {
+  contentBase: './dist',
+  hot: true,
+  host: 'localhost'
+};
+
+webpackDevServer.addDevServerEntrypoints(config,options);
+const compiler = webpack(config);
+const server = new webpackDevServer(compiler,options);
+
+server.listen(5000,'localhost',()=>{
+  console.log('dev server listening on port 5000');
+});

+ 55 - 0
package.json

@@ -0,0 +1,55 @@
+{
+  "name": "preliminary",
+  "sideEffects": false,
+  "version": "1.0.0",
+  "description": "移动端预诊h5",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1",
+    "build": "webpack --config webpack.prod.js",
+    "watch": "webpack --watch",
+    "dev": "webpack-dev-server --open --config webpack.dev.js",
+    "server": "node server.js"
+  },
+  "repository": {
+    "type": "git",
+    "url": "http://192.168.2.236:10080/zhouna/preliminary.git"
+  },
+  "author": "zhouna",
+  "license": "ISC",
+  "dependencies": {
+    "jquery": "^3.4.1",
+    "lodash": "^4.17.11",
+    "vue": "^2.6.10"
+  },
+  "devDependencies": {
+    "@babel/core": "^7.4.5",
+    "@babel/plugin-transform-runtime": "^7.4.4",
+    "@babel/preset-env": "^7.4.5",
+    "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
+    "@vue/babel-preset-jsx": "^1.0.0",
+    "autoprefixer": "^9.6.0",
+    "babel-loader": "^8.0.6",
+    "clean-webpack-plugin": "^3.0.0",
+    "css-loader": "^3.0.0",
+    "express": "^4.17.1",
+    "file-loader": "^4.0.0",
+    "html-webpack-plugin": "^3.2.0",
+    "less": "^3.9.0",
+    "less-loader": "^5.0.0",
+    "mini-css-extract-plugin": "^0.7.0",
+    "optimize-css-assets-webpack-plugin": "^5.0.1",
+    "postcss-loader": "^3.0.0",
+    "style-loader": "^0.23.1",
+    "terser-webpack-plugin": "^1.3.0",
+    "uglifyjs-webpack-plugin": "^2.1.3",
+    "vue-loader": "^15.7.0",
+    "vue-template-compiler": "^2.6.10",
+    "webpack": "^4.33.0",
+    "webpack-cli": "^3.3.4",
+    "webpack-dev-middleware": "^3.7.0",
+    "webpack-dev-server": "^3.7.1",
+    "webpack-merge": "^4.2.1",
+    "xml-loader": "^1.2.1"
+  }
+}

+ 15 - 0
server.js

@@ -0,0 +1,15 @@
+const express = require('express');
+const webpack = require('webpack');
+const webpackDevMiddleware = require('webpack-dev-middleware');
+
+const app = express();
+const config = require('./webpack.config.js');
+const compiler = webpack(config);
+
+app.use(webpackDevMiddleware(compiler,{
+  publicPath:config.output.publicPath
+}));
+
+app.listen(3000,function(){
+  console.log('app listening on port 3000...\n');
+})

+ 17 - 0
src/App.vue

@@ -0,0 +1,17 @@
+<template>
+    <div id="app">
+        {{message}}
+    </div>
+</template>
+<script>
+  import './index.less';
+  export default {
+    name:'app',
+    data(){
+      return {
+        message:'hello1'
+      }
+    }
+  }
+</script>
+

+ 9 - 0
src/index.html

@@ -0,0 +1,9 @@
+<!doctype html>
+<html>
+<head>
+    <title>预诊</title>
+</head>
+<body>
+<div id="app"></div>
+</body>
+</html>

+ 12 - 0
src/index.js

@@ -0,0 +1,12 @@
+import Vue from 'vue';
+import App from './App.vue';
+Vue.config.productionTip = false;
+
+
+new Vue({
+  el:'#app',
+  components:{
+    App
+  },
+  template:'<App/>'
+});

+ 4 - 0
src/index.less

@@ -0,0 +1,4 @@
+body{
+  background: antiquewhite;
+  color: skyblue;
+}

+ 83 - 0
webpack.common.js

@@ -0,0 +1,83 @@
+const path = require('path');
+const { CleanWebpackPlugin } = require('clean-webpack-plugin');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const VueLoaderPlugin = require('vue-loader/lib/plugin');
+
+module.exports = {
+  entry:{
+    app: path.resolve(__dirname,'src','index.js'),
+    //test:path.resolve(__dirname,'src/test','test.js')
+  },
+  plugins: [
+    new CleanWebpackPlugin(),
+    new VueLoaderPlugin(),
+    new HtmlWebpackPlugin({
+      title:'预诊',
+      template:path.resolve(__dirname,'src','index.html'),
+    }),
+    /*new HtmlWebpackPlugin({
+      title:'index',
+      filename:'index.html',      //打包后的文件名,必填,否则都会生成index.html,且后面的覆盖前面的
+      template:path.resolve(__dirname,'src','index.html'),
+      chunks:['app'],
+    }),
+    new HtmlWebpackPlugin({
+      title:'test',
+      filename:'test.html',
+      template:path.resolve(__dirname,'src/test','test.html'),
+      chunks:['test'],
+    }),*/
+  ],
+  output: {
+    filename: "[name].bundle.js",
+    path: path.resolve(__dirname,'dist')
+  },
+  module: {
+    rules: [{
+      test:/\.css$/,
+      use:[
+        'style-loader',
+        'css-loader',
+      ]
+    },{
+      test:/\.less$/,
+      use:[
+        'style-loader',
+        'css-loader',
+        'less-loader'
+      ]
+    },{
+      test: /\.(png|svg|jpg|jpeg|gif)/,
+      use:[{
+        loader: "file-loader",
+        options:{
+          limit:5000,
+          name: 'imgs/[name].[ext]'
+        }
+      }]
+    },{
+      test:/\.vue$/,
+      use:[
+        'vue-loader'
+      ]
+    },{
+      test: /\.js$/,
+      exclude: file => (
+        /node_modules/.test(file) &&
+        !/\.vue\.js/.test(file)
+      ),
+      use: {
+        loader: 'babel-loader',
+        options: {
+          presets: ['@babel/preset-env'],
+          plugins: ['@babel/plugin-transform-runtime']
+        }
+      }
+    }]
+  },
+  resolve: {
+    alias: {
+      'vue$':'vue/dist/vue.esm.js'      //让vue使用compiler模式,默认runtime模式要用render初始化
+    }
+  }
+};

+ 20 - 0
webpack.dev.js

@@ -0,0 +1,20 @@
+const merge = require('webpack-merge');
+const common = require('./webpack.common.js');
+const webpack = require('webpack');
+
+module.exports = merge(common,{
+  mode: 'development',
+  devtool: "inline-source-map",
+  devServer: {
+    contentBase:'./dist',
+    port:'8082',
+    /*openPage:'index.html?a==2',
+    proxy:{
+      '/api':''
+    },*/
+    hot:true
+  },
+  plugins: [
+    new webpack.HotModuleReplacementPlugin()
+  ]
+});

+ 70 - 0
webpack.prod.js

@@ -0,0 +1,70 @@
+const merge = require('webpack-merge');
+const common = require('./webpack.common.js');
+const OptimizeCssAssesetsPlugin = require('optimize-css-assets-webpack-plugin');
+const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
+
+module.exports = merge(common,{
+  mode:'production',
+  devtool:'source-map',
+  optimization:{
+    splitChunks:{
+      chunks:'all',
+      cacheGroups:{
+        vendor:{
+          name:'vendor',
+          test:/[\\/]node_modules[\\/]/,
+          priority:10,
+          chunks:'initial'
+        }
+      }
+    },
+    minimizer:[
+      new UglifyJsPlugin({
+        uglifyOptions:{
+          warnings: false, // 去除警告
+          compress:{
+            drop_debugger: true, // 去除debugger
+            drop_console: true // 去除console.log
+          }
+        },
+        cache:true,
+        parallel:true,
+        sourceMap:false,
+      }),
+      new OptimizeCssAssesetsPlugin({})
+    ]
+  },
+  plugins:[
+    new MiniCssExtractPlugin({
+      filename: 'css/[name].[hash].css',
+      chunkFilename: 'js/[id].[hash].css',
+    }),
+  ],
+  module: {
+    rules: [{
+      test:/\.css$/,
+      use:[{
+        loader: MiniCssExtractPlugin.loader,
+        options: {
+          // you can specify a publicPath here
+          // by default it use publicPath in webpackOptions.output
+          publicPath: '../'
+        }
+      },
+        'css-loader'
+      ]
+    },{
+      test:/\.less$/,
+      use:[{
+        loader: MiniCssExtractPlugin.loader,
+        options:{
+          publicPath:'../'
+        }
+      },
+        'css-loader',
+        'less-loader'
+      ]
+    }]
+  }
+});