當前位置:首頁 » 網頁前端 » 熱載入前端包
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

熱載入前端包

發布時間: 2023-05-12 16:17:36

『壹』 常使用的庫有哪些常用的前端開發工具開發過什麼應用或組件

很多呀。VB,JAVA,.NET 都是資料庫開發的!沒資料庫的程序都是些小的小程序。玩玩而已!

『貳』 nginx部署前端純頁面

1.進入nginx配置文件vim .../nginx-1.9.12/conf/nginx.conf。

如上圖所示:第一個紅框中的內容就是應用伺服器的地址;第二個紅框中的內容就是前端包的位置。

此時,配置文件已經准備完畢。這個包和埠可以存在多個。

2.進入.../nginx-1.9.12/sbin 找到nginx的啟動程序。

nginx -c ../nginx-1.9.12/conf/nginx.conf    啟動nginx程序,並指定配置文件。

3.如果要替換包,則直接替換就行,nginx為熱載入自動更新的。但是以防有緩存之類的存在,可以使用nginx -s reload命令進行重載一次。

追加 一 :

如果前端包的構造如下圖

則location配置依然如下圖

但是訪問地址則需要指定到具體的html文件上。。

綁定: http://127.0.0.1:48110/binding.html

成功: http://127.0.0.1:48110/success.html

失敗: http://127.0.0.1:48110/error.html

追加 二:

同一個埠部署多個頁面:

一個server下,多個 location。

location的作用就是是否有後綴,並且這個後綴會去拼接root後的地址。

比如第二個location /sis/。

則在訪問127.0.0.1:8080/sis時,會去自動尋找/apps/svr/nginx-1.9.12/pagefile/0921/sis這個包。   (Ps:location後的地址一定要用 / 關閉,比如 location /sis/,不然訪問127.0.0.1:8080/sis時,會報錯,只有用127.0.0.1:8080/sis/才行。)

這樣就部署好了一個 埠支持多個頁面。

『叄』 網頁前端常用的庫或框架有哪些

bootstrap是twitter出的一款不錯的UI框架,或者與其說是框架不如說是類庫(lib),當然這里邊牽扯到一個「究竟什麼是框架什麼是類庫?」的問題,我們暫時不談。畢竟是有大公司背景的代碼堆,我覺得沒什麼「落伍」可言。
angular是前兩年之內突然火得一塌糊塗的一個fe框架,這個我覺得可以算的上是真正意義上的框架了,MVVM雙向綁定,包括它擁有足夠完善的社區、生態,甚至chrome上都有很多好用的相關插件(這一點可以說是佔了google出品的光),比較完整的大型項目都是可以考慮引入的。但如果你的網站只是做一些輕量級的東西,殺雞焉用宰牛刀吧我覺得。
backbone主要針對的MVC中的M層,至少我是這么理解的。對UI層它幾乎沒什麼太多的限制,一方面給出了coder自由度進行發揮,另一方面也等於在這方面框架本身對開發沒提供什麼太大的幫助。我覺得這更像是一個高手向的框架,另外對於underscore前端模板那一套東西,說實話作為一名php java啥都能寫的FE我始終覺得這套東西有那麼一種純JS工程師的一廂情願的意味。這是個人看法了,不一定準確,況且有人會搬出ajax動態渲染時 前端模板的作用來反駁我,別急著反駁,至少往下看完我說的話。
相比之下,react可以說是一個在MVC中V層做的十分出色和新穎的框架了,獨特的jsx編譯機制就已經讓你的代碼變得高大上了,我是覺得這個類庫在UI層做的更徹底更專業,或者說讓FE的代碼更專業了。更何況,react比angular更年輕,而且同樣擁有大公司背景,react native一出更是讓JS工程師的地位取得了革命性的提升,(不要跟我提phonegap,用過兩個東西後你會明白,react打包的app性能甩phonegap幾條街沒問題)。另外既然樓主提到了之前的網站是bootstrap,不妨可以看一看react-bootstrap這個東西,或許這就是你想要的。

『肆』 如何用webpack實現自動化的前端構建工作流

1.首先 git clonehttps://github.com/bjtqti/font-end-boilerplate.git 一份到本地

2.然後 npm install && npm run start

3. 最後打開瀏覽器,運行http://localhost:4000

5.解析一下這些目錄的用途:

|- dist下面存放發布的js、css 文件 (自動生成)

|- node_moles 下面是npm安裝的包文件 (自動創建)

|- src 存放具體的業務代碼

|- task 存放webpack的配置代碼

|- task

|- webpack.api.conf.js 用於webpack的api方式的配置文件 server.js用到

|- webpack.dev.conf.js 用於CLI方式使用webpack 的配置

|- webpack.prod.conf.js 用於生產環境打包輸出的配置

|- .postcssrc.js post-loader的插件配置文件,由於後面用了postcss.config.js所以重命名了這個

|- .babelrc babel的配置文件,為了解析es6語法

|- .gitignore git的配置,指出要不參與版本控制的文件及文件夾

|- .package.json 包配置文件

|- postcss.config.js post-loader配置

|- README.md github.com自動創建的項目說明文件

|- server.js 本地開發調式用的web伺服器

需要重點掌握的是package.json 其次是server.js 和 task相關的配置內容

先看看package.json:

{
"name": "shop",
"version": "1.0.0",
"description": "webapp frontend shop",
"main": "index.js",
"scripts": {
"start": "node server.js",
"dev": "webpack-dev-server --config ./task/webpack.dev.conf.js",
"build": "webpack --config ./task/webpack.prod.conf.js",
"test": "echo "Error: no test specified" && exit 1"
},
"keywords": [
"mall",
"shop"
],
"author": "frog",
"repository": "https://github.com/bjtqti/font-end-boilerplate.git",
"license": "MIT",
"devDependencies": {
"babel-core": "^6.25.0",
"babel-loader": "^7.1.1",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-env": "^1.5.2",
"css-loader": "^0.28.4",
"express": "^4.15.3",
"extract-text-webpack-plugin": "^2.1.2",
"html-webpack-plugin": "^2.29.0",
"postcss-loader": "^2.0.6",
"style-loader": "^0.18.2",
"webpack": "^2.6.1",
"webpack-dev-middleware": "^1.11.0",
"webpack-dev-server": "^2.5.0",
"webpack-hot-middleware": "^2.18.0"
},
"dependencies": {
"babel-plugin-transform-runtime": "^6.15.0"
}
}

這個文件其實就是一個json對象,里邊重點掌scripts 的用法。比如start:node server.js 對應 npm run start (或 npm start) 這條命令就相當於是在node環境下運行了server.js

那麼server.js(文件名可以自已定)里邊保存了一些什麼內容?

var express = require("express");
var webpack = require("webpack");
var path = require('path')
var app = express();
var webpackConfig = require("./task/webpack.api.conf.js");
var compiler = webpack(webpackConfig);


var devMiddleware = require('webpack-dev-middleware')(compiler, {
contentBase: webpackConfig.output.path,
publicPath: webpackConfig.output.publicPath,
//hot: true,
//stats: { colors: true },
quiet: true
})

var hotMiddleware = require('webpack-hot-middleware')(compiler, {
//lazy: true,
//path:'/hmr',
log: () => {}
})

app.use(express.static('./dist'));
app.use(hotMiddleware)
app.use(devMiddleware)

app.listen(4000, function () {
console.log("Listening on port 4000!");
});

其實就是使用了express來搭建一個小型的開發伺服器。然後引用webpack-dev-middleware和webpack-hot-middleware兩個中間件,結合webpack.api.conf.js的配置,實現打包和熱載入src下面的代碼。由於這里涉及到express的知識,不打算涉及全棧的前端只需了解一下即可,因為後面還有一個封裝好的工具可以替代這些工作--webpack-dev-server

所以我在script中添加了一個dev:webpack-dev-server 的命令,這全完是為了方便學習這兩種方式的應用,實際上任選其中一種就好了,這一種可能會感覺更簡單,因為它是第一種方式的封裝,但是要深入的了解,還是建議看看第一種方式,Vue-cli也是採用的第一方式,因為它可供開發者自由支配的空間更大。唯一需要注意的是,如果使用webpack-dev-server的話,目前還不能用webpack3.0+。

接下來運行npm run build 看看,dist目錄下是不是多了一些文件?這就是將來可以直接發布到線上的代碼了。

到這里,打包,發布 都介紹完了,下面簡單演示一下熱替換(也就是所謂的無刷新替換效果)。為了演示方便,我在src下放了一些代碼.

當我們打開http://localhost:4000的時候,瀏覽器上有一段綠色的文字:Hello world 還有一個時間毫秒數,加這個毫數的目的是為了演示,如果頁面刷新了,數字會改變。

然後修改style.css中的內容,比如把字體顏色改成紅色,瀏覽器上的字體顏色也相應的變化了,而數字沒有發生改變。如果手動刷新的話,可以看到數字是會變化的。

這不僅會節省時間,而且對於要保存頁面狀態(比如某按鈕選中)的情況非常有用。當我們修改hello.es6的時候,頁面變成了自動刷新,這是因為我沒有使用js的熱替換載入器。

如果對html的修改,也想要自動刷新的話,需要用到插件,發出相應的事件。比如vue-cli中的方式:

// force page reload when html-webpack-plugin template changes
compiler.plugin('compilation', function (compilation) {
compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
hotMiddleware.publish({ action: 'reload' })
cb()
})
})

這里只是發出一個通知:action:'reload',要使頁面自動重新載入,還需要有一個接收通知的代碼:

比如在入口中加入:

/* eslint-disable */
require('eventsource-polyfill')
var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true')

hotClient.subscribe(function (event) {
if (event.action === 'reload') {
window.location.reload()
}
})

這個地方比較深奧,沒有弄明白也沒關系,有其它方式同樣可以實現。比如webpack-dev-server 內部已經自動完成了對不支持熱替換的載入器,自動降為刷新。

這也是為什麼在開發環境下使用了extract-text-webpack-plugin(提取css的插件)後,樣式的熱替換變成了刷新效果的原因。

『伍』 前端項目打包上線首次載入的HTML文件與刷新載入的不一樣

因HTML文件載入時若遇到script標簽則會轉而載入js而暫停HTML文件的載入,導致js中對HTML的操作無法生效報錯而載入終止
在body標簽中引入js文件因HTML文件載入時若遇到script標簽則會轉而載入js而暫停HTML文件的載入,導致js中對HTML的操作無法生效報錯而載入終止修改方式:在body標簽外,HTML標簽內載入js文件,則不會觸發此錯誤因HTML文本已載入完畢,而body標簽的script標簽即使載入遇到錯誤也會載入後續的scrip標簽