基於Threejs的3D疫情地球,環境採用上篇博客裏的前端準備環境。css
首先建立前端代碼文件夾VDEarth html
mkdir VDEarth && cd VDEarch
安裝組件前端
npm安裝應用到的組件node
安裝webpack組件webpack
npm install -D webpack
安裝webpack-cli組件,webpack組件4.0+須要web
npm instlal -D webpack-cli
安裝threejs組件npm
npm install three
安裝lodash組件json
npm install lodash
代碼結構babel
webpack搭建前端代碼框架框架
npm init -y
分離webpack配置,分離爲webpack.base.js,webpack.dev.js,webpack.prod.js
搭建好的代碼結構:
沒什麼好說的,搭建能夠參考webpack官網
webpack.base.js
配置入口文件爲src下index.js文件
輸出配置爲類庫方式,另外引入一些經常使用插件和loader
1 const path = require('path'); 2 let HtmlWebpackPlugin = require('html-webpack-plugin'); 3 const { CleanWebpackPlugin } = require('clean-webpack-plugin'); 4 const MiniCssExtractPlugin = require('mini-css-extract-plugin'); 5 const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin'); 6 const copyWebpackPlugin = require('copy-webpack-plugin'); 7 module.exports = { 8 entry: './src/index.js', 9 output: { 10 filename: 'VDEarth.js', 11 path: path.resolve(__dirname, 'dist'), 12 library: 'VDEarth', 13 libraryTarget: 'umd', 14 umdNamedDefine: true, 15 }, 16 plugins: [ 17 new HtmlWebpackPlugin({ 18 template: './src/public/index.html', 19 }), 20 new CleanWebpackPlugin(), 21 new MiniCssExtractPlugin(), 22 new OptimizeCssAssetsPlugin(), 23 new copyWebpackPlugin([ 24 { 25 from: __dirname + '/src/fonts', //打包的靜態資源目錄地址 26 to: './fonts', //打包到dist下面的public 27 }, 28 ]), 38 ], 39 module: { 40 rules: [ 41 { 42 test: /\.(woff|woff2|eot|ttf|otf|json)$/, 43 use: { 44 loader: 'file-loader', 45 options: { 46 name: 'fonts/[name].[ext]', 47 publicPath: './', 48 }, 49 }, 50 }, 51 { 52 test: /\.(svg|gif|png|jpg)$/, 53 use: { 54 loader: 'file-loader', 55 options: { 56 name: 'images/[name].[ext]', 57 publicPath: './', 58 }, 59 }, 60 }, 61 { 62 test: /\.(css|less)$/, 63 use: [MiniCssExtractPlugin.loader, 'css-loader', 'less-loader'], 64 }, 72 { 73 test: /\.(jsx|js)$/, 74 exclude: /node_modules/, 75 loader: 'babel-loader', 76 }, 77 ], 78 }, 79 externals: { 80 lodash: { 81 commonjs: 'lodash', 82 commonjs2: 'lodash', 83 amd: 'lodash', 84 root: '_', 85 }, 86 }, 87 };
package.json
修改package.json,這裏刪除scripts屬性下的配置,修改成
"build": "webpack --config webpack.prod.js",
"watch": "webpack --watch",
"start": "webpack-dev-server --config webpack.dev.js"
build命令進行項目的發佈
start命令使用了webpack-dev-server,藉助這個能夠進行熱啓動,代碼調試
watch命令能夠不用,只是檢測改動
{ "name": "vdearth", "version": "1.0.0", "description": "", "private": true, "dependencies": { "lodash": "^4.17.15", "three": "^0.115.0" }, "devDependencies": { "@babel/cli": "^7.8.4", "@babel/core": "^7.9.0", "@babel/preset-env": "^7.9.0", "babel-loader": "^8.1.0", "clean-webpack-plugin": "^3.0.0", "copy-webpack-plugin": "^5.1.1", "css-loader": "^3.5.2", "file-loader": "^6.0.0", "html-webpack-plugin": "^4.0.3", "json-loader": "^0.5.7", "less": "^3.11.1", "less-loader": "^5.0.0", "mini-css-extract-plugin": "^0.9.0", "optimize-css-assets-webpack-plugin": "^5.0.3", "style-loader": "^1.1.3", "webpack": "^4.42.1", "webpack-cli": "^3.3.11", "webpack-dev-server": "^3.10.3", "webpack-merge": "^4.2.2" }, "scripts": { "build": "webpack --config webpack.prod.js", "watch": "webpack --watch", "start": "webpack-dev-server --config webpack.dev.js" }, "keywords": [], "author": "", "license": "ISC" }
分層文件
在src文件內分別建立fonts,image,public,style文件夾,存放3D可視化的分類素材
新增VDEarth.js 做爲主要地球邏輯的實現類,indexjs做爲組件入口文件
主要功能js
首先要支持3D地球的可視化的顯示,須要用到threejs的幾個對象,如mesh,material,geometry,依次建立幾個js,mode.js,material.js,geometry.js
支持地球上的標記,事件,動畫,數據獲取,依次建立marker.js ,eventListener.js, animate.js,socketjs
建立組件的一些工具方法,建立utils.js
加上上篇建立的入口index.js ,vdEarth.js主文件,目錄結構以下
至此,簡單的前端代碼框架就搭建完成了,npm run start 就能夠運行起來
相關連接
從0開始疫情3D地球 - 3D疫情地球VDEarth - 1- 引言
從0開始疫情3D地球 - 3D疫情地球VDEarth - 2 - 前端代碼構建
從0開始疫情3D地球 - 3D疫情地球VDEarth - 3 - 3D地球組件實現(1)
從0開始疫情3D地球 - 3D疫情地球VDEarth - 4 - 3D地球組件實現(2)