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