国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

webpack-mvc 傳統(tǒng)多頁面組件化開發(fā)詳解

2024-05-06 15:39:45
字體:
供稿:網(wǎng)友

最近有一個(gè)項(xiàng)目,還是使用的傳統(tǒng) MVC 模式開發(fā),完全基于jQuery,使用了基于java模板引擎velocity,頁面中嵌入了大量java語法,使得前后端分離不徹底,工程打包上線苦不堪言,為實(shí)現(xiàn)后端為服務(wù)化,前端也得徹底從后端中分離出來。

方案: webpack4 + ejs

webpack

打包所有的 資源 打包所以的 腳本 打包所以的 圖片 打包所以的 樣式 打包所以的 表

ejs

高效的 JavaScript 模板引擎,代替 velocity

webpack 配置

基本插件

@babel/core,@babel/preset-env,babel-loader

es6 語法轉(zhuǎn)譯

css-loader,style-loader

編譯打包c(diǎn)ss

node-sass,sass-loader

解析sass

postcss-loader,autoprefixer

自動(dòng)給樣式增加瀏覽器前綴

mini-css-extract-plugin

將css從js中抽離出來為單獨(dú)文件

optimize-css-assets-webpack-plugin

壓縮css

uglifyjs-webpack-plugin

壓縮js

ejs-loader

解析ejs模板文件

html-webpack-plugin

生成html文件

rimraf

刪除文件、文件夾

watch

監(jiān)聽文件變化

上面是一些要用的插件,具體用法不累述。

入口文件

入口文件長(zhǎng)這樣(可單一入口,也可多入口):

// 多入口entry: { pageA: './src/pageA/index.js', pageB: './src/pageB/index.js', 'pageC/login': './src/pageC/login/login.js'}

出口文件:

output: { filename: '[name].js', path: path.resolve(__dirname, '../dist'),}

filename 值中的 [name] 對(duì)應(yīng)入文件的 key 值,/ 分割文件夾。

最后就會(huì)在dist文件夾下生產(chǎn)文件:

dist/pageA/index.js dist/pageB/index.js dist/pageC/login/login.js

既然是多頁面開發(fā),就要有多個(gè)入口,每個(gè)頁面都要有自己對(duì)應(yīng)的js入口,這樣我們只需要遍歷html文件,然后找到對(duì)應(yīng)的js,處理成 entry 對(duì)象即可

const path = require('path')const glob = require('glob')const pages = (entries => { let entry = {}, htmlArr = [] // 格式化生成入口 entries.forEach((file) => {  // ...../webpack-mvc/src/page/pageA/index.html  const fileSplit = file.split('/')  const length = fileSplit.length  // 頁面入口 pageA/index.html  const filePath = fileSplit.slice(length - 2, length).join('/')   // 根據(jù)html路徑找到對(duì)應(yīng)的js路徑,js可以和html放在同一文件夾,也可單獨(dú)放在一個(gè)文件夾內(nèi),只要能找到   const jsPath = path.resolve(__dirname, `../src/page/${filePath.split('.')[0]}.js`)   // _main.ejs 頁面主題框架,html組件化  pageHtml = path.resolve(__dirname, '../src/_main.ejs')   if (!fs.existsSync(jsPath)) {   return;  }  entry['js/' + filePath.split('.')[0]] = jsPath // 加 js/ 即表示將打包后的js單獨(dú)放在一個(gè)文件夾內(nèi) }) return entry})(glob(path.resolve(__dirname, '../src/page/*/*.html'), {sync: true}))            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 西平县| 辽中县| 佳木斯市| 孝昌县| 建瓯市| 奉新县| 章丘市| 科技| 子洲县| 北流市| 宁陵县| 古田县| 蕲春县| 涞源县| 宝应县| 和田市| 扬中市| 平顶山市| 彭州市| 彰化市| 澳门| 体育| 清水县| 芒康县| 同心县| 咸阳市| 江陵县| 贵港市| 深州市| 荆州市| 杭州市| 吉林省| 缙云县| 郁南县| 务川| 台南县| 南阳市| 河北省| 连山| 进贤县| 左权县|