摘要:文件夾用來存放供瀏覽器讀取的文件,這個是打包成的文件。在文件下手動建立一個文件,并寫入下面的代碼。配置出口文件的地址在版本后,支持多出口配置??梢苑乐共煌僮飨到y(tǒng)之間的文件路徑問題,并且可以使用相對路徑按照預(yù)期工作。
搭建webpack_demo1項目,使其運行起來
webpack的強(qiáng)大就不介紹了,我們直接動手做起來,我們從零開始一步步搭建一個多頁面的系統(tǒng),多參考webpack中文文檔
cmd命令:
mkdir webpack_demo1 #創(chuàng)建文件夾 cd webpack_demo1 #進(jìn)入文件夾 npm install -g webpack #全局安裝webpack npm init #初始化 npm install --save-dev webpack #安裝webpack包
可以安裝淘寶鏡像 $ npm install -g cnpm --registry=https://registry.npm.taobao.org 上面的npm就可以寫成cnpm
demo1的目錄:
|——node_modules ├─dist # 打包后的文件 | ├─greeter.js #就放了一句話 | |──main.js #入口文件 ├─src #當(dāng)前項目的源碼 | ├─greeter.js #就放了一句話 | |──main.js #入口文件 |——webpack.config.js #webpack配置文件 |——package.json #依賴包
進(jìn)入上我們建立的webpack_demo1目錄,建立兩個文件夾,分別是src文件夾和dist文件夾:
src文件夾:用來存放我們編寫的javascript代碼,可以簡單的理解為用JavaScript編寫的模塊。 dist文件夾:用來存放供瀏覽器讀取的文件,這個是webpack打包成的文件。 可以理解成src是源碼文件,dist是我們編譯打包好的文件;一個用于開發(fā)環(huán)境,一個用于生產(chǎn)環(huán)境。
在dist文件下手動建立一個index.html文件,并寫入下面的代碼。
webpack_demo1
在src文件夾下建立main.js和greeter.js,編寫我們的JavaScript代碼,main.js是我們的入口文件。
在main.js文件里寫: const greeter=require("./greeter.js"); document.getElementById("root").innerHTML = greeter(); 在greeter.js文件里寫: module.export = function(){ return "第一個webpack demo"; };
第一次打包
在終端下 寫命令:webpack "entry file" "destination for bundled file"
entery file: 入口文件的路徑,這里就是src/main.jsdestination for bundled file: 填寫打包后存放的路徑,這里就是dist/bundle.js
所以終端寫:webpack src/entry.js dist/bundle.js(webpack非全局安裝執(zhí)行:node_modules/.bin/webpack src/main.js dist/bundle.js)
成功后,在dist文件夾下會出現(xiàn)一個bundle.js
在根目錄下新建一個名為webpack.config.js的文件,
標(biāo)準(zhǔn)的webpack配置模板: module.exports={ entry:{}, //配置入口文件的地址,可以是單一入口,也可以是多入口。 output:{}, //配置出口文件的地址,在webpack2.X版本后,支持多出口配置。 module:{},//配置模塊:主要是解析CSS和圖片轉(zhuǎn)換壓縮等功能。 plugins:[],//配置插件,用于生產(chǎn)模版和各項功能 devServer:{} //配置webpack開發(fā)服務(wù)功能 }
我們在其中寫入如下所示的簡單配置代碼: 入口文件路徑/打包后文件的存放路徑:
const webpack = require("webpack"); const path = require("path"); module.exports = { entry: __dirname + "/src/main.js",//已多次提及的唯一入口文件 output: { path: __dirname + "/dist",//打包后的文件存放的地方 filename: "bundle.js"http://打包后輸出文件的文件名 }, module:{}, plugins:[], devServer:{} }; //__dirname”是node.js中的一個全局變量,它指向當(dāng)前執(zhí)行腳本所在的目錄。
第二次打包 (先刪掉dist中已有的bundle.js)
在終端下 寫命令:webpack(wepack非全局安裝執(zhí)行:node_modules/.bin/webpack)
成功后,在dist文件夾下會出現(xiàn)一個bundle.js
在命令行中輸入命令"node_modules/.bin/webpack"這樣的操作是比較煩人的,不過值得慶幸的是npm可以引導(dǎo)任務(wù)執(zhí)行,
對npm進(jìn)行配置后可以在命令行中使用簡單的npm start命令來替代上面略微繁瑣的命令:
在package.json中對scripts對象添加一條下命令:"start": "wepack"
注意:package.json中的script會安裝一定順序?qū)ふ颐顚?yīng)位置,本地的node_modules/.bin路徑就在這個尋找清單中,所以無論是全局還是局部安裝的Webpack,都不需要寫前面那指明詳細(xì)的路徑了。
第三次打包:(先刪掉dist中已有的bundle.js)
在命令行中輸入:npm start
成功后,在dist文件夾下會出現(xiàn)一個bundle.js
讓瀏覽器監(jiān)聽你的代碼的修改,并自動刷新顯示修改后的結(jié)果: 在終端輸入:npm install --save-dev webpack-dev-server 在package.json中對scripts對象添加一條下命令用以開啟本地服務(wù)器: "server": "webpack-dev-server --open"
在webpack.config.js中添加devServer:
devServer:{ contentBase:path.resolve(__dirname,"dist"), //設(shè)置基本目錄結(jié)構(gòu),本地服務(wù)器所加載的頁面所在的目錄 host:"localhost",//服務(wù)器的IP地址,可以使用IP也可以使用localhost inline: true,//實時刷新 compress:true,//服務(wù)端壓縮是否開啟,一般設(shè)置為開啟, historyApiFallback: true,//不跳轉(zhuǎn) port:1818 //配置服務(wù)端口號,建議不使用80,很容易被占用,這里使用了1818 }
在頁面上已經(jīng)可以看到一句話了" 第一個webpack demo ";
關(guān)于入口和出口配置的寫法及其解釋
entry入口:
單入口有以下寫法: entry: __dirname + "/src/main.js", entry: "./src/main.js", 多入口有以下寫法: entry:{ index: "./src/main.js", selectList:"./src/***.js" },
output出口:
output: { path: __dirname + "/dist",//打包后的文件存放的地方 // path:path.resolve(__dirname,"dist"), filename: "bundle.js"http://打包后輸出文件的文件名 //filename:"[name].js" // filename:"js/[name].js" // filename:"js/[name].bundle-[chunkhash:8].js" }, filename: "[name].js" filename: "[name]-[hash].js" 打包文件名: main.js main-6672c04f6c9672410a61.js filename:"js/[name].js": 打包目錄是:|——dist | |——js | | |——main.js filename:"js/[name].bundle-[chunkhash:8].js" : 打包目錄是:|——dist | |——js | | |——main.bundle-d0dea2df.js [name]:是根據(jù)入口文件的名稱,打包成相同的名稱,有幾個入口文件,就可以打包出幾個文件。 [chunkhash:8]: 數(shù)字和字母組成的8位哈希值 __dirname:是node.js中的一個全局變量,它指向當(dāng)前執(zhí)行腳本所在的目錄,打印出來是:webpackwebpack_demo1 path:使用Node內(nèi)置的path模塊,并在它前面加上__dirname這個全局變量。 可以防止不同操作系統(tǒng)之間的文件路徑問題,并且可以使用相對路徑按照預(yù)期工作。
建議使用:filename:"js/[name].bundle-[chunkhash:8].js":
可以通過命中緩存,以降低網(wǎng)絡(luò)流量,使網(wǎng)站加載速度更快, 然而,如果我們在部署新版本時不更改資源的文件名,瀏覽器可能會認(rèn)為它沒有被更新, 就會使用它的緩存版本。由于緩存的存在,當(dāng)你需要獲取新的代碼時,就會顯得很棘手。
關(guān)于緩存:看文檔
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/107316.html
摘要:有沒有辦法實現(xiàn)就局部刷新呢當(dāng)然是有第十步執(zhí)行為了實現(xiàn)局部熱加載,我們需要添加插件。 前言 用了3個多月的vue自認(rèn)為已經(jīng)是一名合格的vue框架api搬運工,對于vue的api使用到達(dá)了一定瓶頸,無奈水平有限,每每深入底層觀賞源碼時候都迷失了自己。 遂決定再找個框架學(xué)習(xí)學(xué)習(xí)看看能否突破思維局限,加上本人早已對React、RN技術(shù)垂涎已久,于是決定找找教程來學(xué)習(xí)。無奈第一步就卡在了環(huán)境搭...
摘要:開始改建補(bǔ)充安裝依賴與上一次不同,這次我們基于進(jìn)行改建,已經(jīng)有了很多依賴庫了,但我們?nèi)涡枰a(bǔ)充一個核心修改客戶端的配置修改文件,添加插件添加了這個配置以后,重新啟動項目通過地址就可以訪問到,頁面中出現(xiàn)的內(nèi)容就是所需要的。 從零開始搭建一個vue-ssr 前言 上次我們已經(jīng)實現(xiàn)了從零開始,搭建一個簡單的vue-ssr的demo:從零開始搭建一個vue-ssr(上)。那么這次呢,我們基于v...
摘要:各個大廠也相繼宣布開源。但是也會存在一些問題,比如每個公司可能需要的業(yè)務(wù)組件不盡相同,或者我們想自己開發(fā)一套屬于自己的組件庫,來增強(qiáng)對組件的可控性。 前言: 前端組件化是當(dāng)今熱議的話題之一,也是我們在開發(fā)單頁應(yīng)用經(jīng)常會碰到的一個問題,現(xiàn)在我們有了功能非常完善的Element-UI。各個大廠也相繼宣布開源XXX-UI。但是也會存在一些問題,比如每個公司可能需要的業(yè)務(wù)組件不盡相同,或者我們...
摘要:各個大廠也相繼宣布開源。但是也會存在一些問題,比如每個公司可能需要的業(yè)務(wù)組件不盡相同,或者我們想自己開發(fā)一套屬于自己的組件庫,來增強(qiáng)對組件的可控性。 前言: 前端組件化是當(dāng)今熱議的話題之一,也是我們在開發(fā)單頁應(yīng)用經(jīng)常會碰到的一個問題,現(xiàn)在我們有了功能非常完善的Element-UI。各個大廠也相繼宣布開源XXX-UI。但是也會存在一些問題,比如每個公司可能需要的業(yè)務(wù)組件不盡相同,或者我們...
摘要:從零開始最小實現(xiàn)服務(wù)器渲染前言最近在寫的時候想到,如果我部分代碼提供,部分代碼支持,那我應(yīng)該如何寫呢不想拆成個服務(wù)的情況下而且最近寫的項目里面也用過一些服務(wù)端渲染,如,自己也搭過的項目,確實開發(fā)體驗都非常友好,但是友好歸友好,具體又是如何實 showImg(https://segmentfault.com/img/bVMbjB?w=1794&h=648); 從零開始最小實現(xiàn) react...
閱讀 3371·2021-11-11 16:54
閱讀 3526·2021-10-11 10:58
閱讀 1265·2021-08-30 09:41
閱讀 1809·2019-08-30 15:54
閱讀 2036·2019-08-30 14:00
閱讀 2710·2019-08-29 17:13
閱讀 1678·2019-08-29 15:19
閱讀 614·2019-08-29 15:14