摘要:這里提供手動搭建單頁面開發生產環境,并使用寫后臺代碼,僅供小白參考代碼雖然沒多少,但牽扯的知識很多,需要逐個研究后續內容手動搭建單頁面二項目地址內容提要,這一章會從到開發環境,生產環境的搭建思路先實現單頁面的然后實現服務下的開發環境再實
這里提供手動搭建vue單頁面開發生產環境,并使用node寫后臺代碼,僅供小白參考;
代碼雖然沒多少,但牽扯的知識很多,需要逐個研究;
后續內容《手動搭建vue+node單頁面(二)》
https://segmentfault.com/a/11...
項目地址:https://github.com/liubingyan...
內容提要:vue2,webpack,express,router,jsonp,這一章會從0到開發環境,生產環境的搭建:
思路: 先實現webpack單頁面的demo -> 然后實現express服務下的開發環境 -> 再實現開發·生產環境的切換 -> 最后做業務相關的頁面和后端開發
一、創建項目:
1.初始化項目:在桌面新建文件夾test,在test目錄下命令行輸入npm init -y;
2.test下創建src文件夾(前端所有代碼);
build文件夾(打包相關的webpack配置文件);
service文件夾(存放后端代碼);
data文件夾(存放json數據);
server.js(node服務)
二、下面我們先做單頁面,先不管服務的事情
在src目錄中創建views(存放所有.vue組件),router(存放前端路由配置),store(存放vuex配置),man.js(單頁面入口文件),app.vue(單頁面首頁組件),test下創建index.html作為載體。
接下來要做幾件事完成單頁面demo:
(1)編寫入口文件main.js
//main.js const Vue from "vue" const App from "./app" new Vue({ el:"#app", render:h=>h(App) })
(2)單頁面主體app.vue;
//app.vue{{msg}}
(3)接下來是配置文件:在build文件夾中創建webpack.config.js
//webpack.config.js const path = require("path") module.exports = { mode:"development",//webpack4新加的,不寫會報黃 entry: { main: path.resolve(__dirname, "../src/main.js") }, output: { path: path.resolve(__dirname, "../dist"), publicPath: "http://localhost:3000/", filename: "[name].js" }, module: { rules: [{ test: /.vue$/, loader: "vue-loader", options: { loaders: { "less": [ "vue-style-loader", "css-loader", "less-loader" ] } } }, { test: /.js$/, loader: "babel-loader", exclude: /node_modules/ },] }, resolve: { alias: {//開發環境使用vue.esm.js",官網有說明 "vue$": "vue/dist/vue.esm.js" }, //reuqire加載文件會自動為以下后綴的文件(如:./app.vue可以寫成./app了) extensions: ["*", ".js", ".vue", ".json"] }, }
接下來就是要啟動項目了,不過要先安裝各種插件
vue vue-loader webpack css-laoder sass-loader vue-style-loader babel-loader ````
不全,缺什么根據提示慢慢裝
應為最終我們啟動項目是用server.js啟動,所以在這里我們這樣寫
//server.js const webpack=require("webpack") const webpackConfig=require("./build/webpack.config") webpack(webpackConfig,function(err,stats){ if(err) throw err //輸出打包信息(不用在意這些細節) process.stdout.write(stats.toString({ colors: true, modules: false, children: false, chunks: false, chunkModules: false }) + " ") })
然后執行打包(在test目錄下)
node server
爆紅就好好看看是語法錯誤還是少插件,一會兒就能解決。
看下效果,忘記,index.html要先寫成:
//index.html
打開index.html看看效果。
三、開始實現express啟服和熱加載
接下來用express啟服,同時實現webpack的熱加載和server.js的熱加載;
1.修改配置server.js
//server.js const webpack=require("webpack") const webpackConfig=require("./build/webpack.config") //dev和hot用來實現前端的熱加載 const webpackDevMiddleware = require("webpack-dev-middleware") const webpackHotMiddleware = require("webpack-hot-middleware") const express=require("express") const path=require("path") const app=express() const compiler = webpack(webpackConfig)//刪除了打印的回調函數,加上的話這里會執行兩遍打包,不曉得為啥 app.use(webpackDevMiddleware(compiler,{ // public path should be the same with webpack config //在項目中這樣的路徑都會配置到統一的文件中 publicPath: "http://localhost:3000/", noInfo: true, stats: { colors: true } })) app.use(webpackHotMiddleware(compiler)) app.listen(3000,function(){ console.log("App is now running on port 3000!"); })
2.修改兩個地方:webpack配置和index.html
// webpack.config.js const path = require("path") const webpack=require("webpack") const htmlPlugin=require("html-webpack-plugin") //增加頁面熱加載字段,添加到entry中(固定寫法) const hotMiddlewareScript = "webpack-hot-middleware/client?reload=true" module.exports = { mode: "development", entry: { //就是這樣寫就對 了 main: [path.resolve(__dirname, "../src/main.js"),hotMiddlewareScript] }, output: { path: path.resolve(__dirname, "../dist"), publicPath: "http://localhost:3000/", filename: "[name].js" }, module: { rules: [{ test: /.vue$/, loader: "vue-loader", options: { loaders: { "scss": [ "vue-style-loader", "css-loader", "less-loader" ] } } }, { test: /.js$/, loader: "babel-loader", exclude: /node_modules/ }, ] }, resolve: { alias: { "vue$": "vue/dist/vue.esm.js" }, extensions: ["*", ".js", ".vue", ".json"] }, //新增html插件,生成main.js的同時生成index.html plugins:[ new htmlPlugin({ template:"index.html" }), //熱加載需要使用這個插件才起作用 new webpack.HotModuleReplacementPlugin(), ] }
然后index.html改動就是刪除自己寫的script標簽就好。
3.啟動項目之前全局安裝一個插件:(前端有了熱加載,這個是為了后端的熱加載,修改服務或者打包配置文件不用手動重啟服務。)
npm i supervisor -g
然后修改package.json中的scripts
//package.json "scripts": { "test": "echo "Error: no test specified" && exit 1", //這句話是說:監控(-w)后定義的文件或者文件夾 -e表示-w監控的文件夾中的js文件發生變化時重啟server.js "start": "supervisor -w server,build,server.js -e js server"
},
4.接下來激動人心的時刻,啟動:
npm run start
打開localhost:3000
按下f12看看有沒有報錯,當當當當,沒有報錯,現在已經完成了一個簡單但功能完善的開發環境;
四、署下生產環境
部署生產環境我們要做幾件事:
1.build新建config.js,配置一些通用設置;
2.build新建webpack.config.dev.js,區分開發模式和生產模式的配置,其實可以寫在一個文件中,弊端就是代碼太長,而且開發模式require()的組件比較多,生產模式沒必要加載,所以分開;
3.修改server.js,webpack.js和package.json文件;
我們先修改package.json
//通過設置node環境中process.ENV屬性,來告訴webpack和server應該運行在哪個環境,cross-env NODE_ENV就是用來設置process.ENV的; //package.json "scripts": { "test": "echo "Error: no test specified" && exit 1", "start": "supervisor -w server,build,server.js -e js,html server", "dev": "cross-env NODE_ENV=development supervisor -w server,build,server.js -e js,html server", "pro": "cross-env NODE_ENV=production node server" },
cross-env需要安裝下
npm i cross-env -save
再運行開發環境就用npm run dev ,生產就用npm run pro
接下來在build文件夾下創建并配置config.js
//config.js //簡單配置夠用就好,完整的配置可以到vue全家桶中學習 const path=require("path") let isdev=process.env.NODE_ENV=="development"?true:false let config={ isdev:isdev, publicPath:"http://localhost:3000/", port:"3000" } module.exports=config
在build下創建并編輯webpack.dev.config.js(把之前的webpack.config.js復制一下)
//webpack.config.dev.js(只展示不同的地方) //.... //新增通用配置文件 const config = require("./config") //.... output: { path: path.resolve(__dirname, "../dist"), publicPath: config.publicPath,//就是修改了輸出的公網路徑為配置文件中的路徑 filename: "[name].js" }, plugins: [ new webpack.HotModuleReplacementPlugin(), //刪除html模板(后面會解釋) //new htmlPlugin({ // template:"index.html" // }), ] //....
接下來修改webpack.config.js為生產環境配置(同樣只列出不同的地方)
//webpack.config.js const config = require("./config") //刪除熱加載 //const hotMiddlewareScript = "webpack-hot-middleware/client?reload=true" //新增文件清除插件 const cleanWebpackPlugin = require("clean-webpack-plugin") //.... entry: { main:path.resolve(__dirname, "../src/main.js")//取消熱加載 }, output: { path: path.resolve(__dirname, "../dist"), publicPath: config.publicPath, filename: "[name].js" }, //.... resolve: { alias: { "vue$": "vue/dist/vue.min.js"http://生產使用壓縮的vue文件 }, extensions: ["*", ".js", ".vue", ".json"] }, plugins: [ //刪除熱加載 //new webpack.HotModuleReplacementPlugin(), //刪除html模板(后面會解釋) //new htmlPlugin({ // template:"index.html" // }), //增加dist刪除選項 new cleanWebpackPlugin(["dist"], { "root": path.resolve(__dirname, "../"), }) ] //....
最后修改server文件,覺得長可以試著分成開發生產兩個文件
//server.js const webpack = require("webpack") const webpackConfig = require("./build/webpack.config") const webpackDevConfig = require("./build/webpack.config.dev") const webpackDevMiddleware = require("webpack-dev-middleware") const webpackHotMiddleware = require("webpack-hot-middleware") const express = require("express") const path = require("path") //新增config和swig插件 const config = require("./build/config") const swig = require("swig") const app = express() //swig一款js模板引擎,是服務端向客戶端返回html的一種方式,swig只是眾多引擎中的一種; //這里通過node向頁面返回html,而不是直接訪問dist中的index.html,所以到這里已經把webpack中的html模板刪掉了; //如果使用webpack使用html插件,在切換生產和開發需要手動修改html的script; app.engine("html", swig.renderFile); app.set("view engine", "html"); app.set("views", path.resolve(__dirname, "./")); app.get("/", function(req, res) { res.type("text/html"); res.render("index"); }); if (config.isdev) { console.log("server運行在開發環境") const compiler = webpack(webpackDevConfig) app.use(webpackDevMiddleware(compiler, { // public path should be the same with webpack config publicPath: "http://localhost:3000/", stats: { colors: true } })) app.use(webpackHotMiddleware(compiler)) } else { console.log("server運行在生產環境") webpack(webpackConfig, function(err, stats) { if (err) throw err //輸出打包信息(這里又可以用了) process.stdout.write(stats.toString({ colors: true, modules: false, children: false, chunks: false, chunkModules: false }) + " ") app.use(express.static(path.resolve(__dirname, "./dist"))) }) } app.listen(config.port, function() { console.log("App is now running on port 3000!"); })
運行之前先裝下swig插件,同時修改下index.html,手寫
//index.html
到目前為止的目錄結構:
環境搭建完成了,業務代碼及后端邏輯下篇再講;
《手動搭建vue+node單頁面(二)》
https://segmentfault.com/a/11...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/94204.html
手動搭建vue+node單頁面(二) 環境搭建好了,開始寫業務和后端接口代碼,這一篇講的內容也比較簡單,只適合小白參考; 環境搭建請參考 《手動搭建vue+node單頁面(一)》:https://segmentfault.com/a/11... 項目地址:https://github.com/liubingyan... 內容提要:1.jsonp獲取baidu搜索框內容;2.node調用juejin...
摘要:當我們面對復雜的代碼,當我們看到各種配置文件的時候,你是否會為此感到頭疼,是否會覺得心累今天,大家可以跟著我一起,自己來是用構建一個基于單頁面的應用,廢話不多,立即開始創建項目創建項目需要的基礎文件和文件夾安裝以及一些其他的依賴包配置 當我們面對vue-cli 復雜的代碼,當我們看到各種配置文件的時候,你是否會為此感到頭疼,是否會覺得心累?今天,大家可以跟著我一起,自己來是用webpa...
摘要:更改文件配置輸入命令下載配置中的如果要打包或者其它,再安裝對應的。 作者:NCUHOME-FED Flura的博客已經獲得原作者授權 主要設置 創建項目 新建一個項目文件夾 npm init -y 初始化 package.json showImg(http://img.flura.cn/npm_init-y.png); 安裝 webpack 依賴包 npm install --sa...
閱讀 1772·2021-10-11 10:57
閱讀 2356·2021-10-08 10:14
閱讀 3400·2019-08-29 17:26
閱讀 3356·2019-08-28 17:54
閱讀 3029·2019-08-26 13:38
閱讀 2904·2019-08-26 12:19
閱讀 3613·2019-08-23 18:05
閱讀 1282·2019-08-23 17:04