從0開始手工搭建webpack專案
阿新 • • 發佈:2019-02-15
webpack的工作方式是:通過一個配置檔案找到入口檔案,從這個入口檔案找到你專案依賴的所有資原始檔,使用對應的資源載入器(loaders)來處理這些資原始檔,最後打包成靜態檔案。
1,安裝webpack
//全域性安裝的作用是直接在命令列中使用
npm install -g webpack
//安裝到專案目錄,使用webpack的功能
npm install --save-dev webpack
2,使用webpack:
在開始上手專案之前首先來搭建我們的目錄結構
例如搭建目錄結構如下:
3,package.json檔案 使用 npm init
命令可以自動生成。
4,編寫核心配置檔案——webpack.config.js檔案
var webpack = require('webpack'); var path = require('path'); module.exports = { entry: __dirname + "/public/javascript/main.js",//唯一入口檔案 output: { path: __dirname + "/public",//打包後的檔案存放的地方 filename: '[name].bundle.js',//打包後的檔名 // path: path.resolve(__dirname, 'build'),//用path的resolve方法進行解析 // publicPath: './build/'//打包後文件存放的路徑 }, devtool: 'eval-source-map',//生成後的程式碼 - 每個模組相互分離,並用模組名稱進行註釋 devServer: { //讓瀏覽器監聽你的程式碼的修改,並自動重新整理顯示修改後的結果 contentBase: "./public",//本地伺服器所載入的頁面所在的目錄 historyApiFallback: true,//不跳轉 inline: true//實時重新整理 }, module: {//module屬性主要存放解析資原始檔的各個載入器,每一個物件表示了一個載入器 rules: [ { test: /(\.jsx|\.js)$/,//test屬性表示正則匹配,用來匹配檔案的字尾名 use: { loader: "babel-loader" }, exclude: /node_modules/ }, { test: /\.css$/, use: [ { loader: "style-loader" }, { loader: "css-loader", options: { modules: true, // 指定啟用css modules localIdentName: '[name]__[local]--[hash:base64:5]' // 指定css的類名格式 } } ] } ] } };
4(可選),使用webpack構建本地伺服器
如果想讓瀏覽器監聽你的程式碼的修改,並自動重新整理顯示修改後的結果
npm install --save-dev webpack-dev-server
5,編寫入口檔案 (這裡我寫的是一個簡單的登入功能,登入驗證狀態在控制檯輸出)
在/public/javascript/目錄下,編寫入口檔案main.js:
import Users from './Users'; //匯入資料類 let data = new Users(); let btn = document.getElementById('btn'); btn.onclick = function(){ let nameValue = document.getElementById('username').value; let pwdValue = document.getElementById('password').value; let user = data.findUserByUserName(nameValue); if( user == null ){ //使用者名稱不存在 console.log("使用者名稱不存在"); } else {//使用者名稱存在 if(pwdValue != user.password){//密碼錯誤 console.log("密碼錯誤"); }else{//登入成功 console.log("登入成功"); } } }
6,編寫模組檔案:
在/public/javascript/目錄下,編寫登入的資料檔案Users.js:
//儲存靜態資料的類
class Users{
constructor(){
this.users = [
{
"username":"user1",
"password":"pwd1"
},
{
"username":"user2",
"password":"pwd2"
}
];
}
findUserByUserName(username){
for(let i = 0;i<this.users.length;i++){
if(username == this.users[i].username){
return this.users[i];
}
}
return null;
}
}
export default Users;
7,index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Webpack Sample Project</title>
</head>
<body>
<div>
<div id='root'></div>
<form action='#' method="POST">
<table>
<tr>
<td>使用者名稱:</td>
<td><input type="text" name="username" id="username"></td>
</tr>
<tr>
<td>密碼:</td>
<td><input type="password" name="password" id="password"></td>
</tr>
<tr>
<td><input type="button" name='btn' id='btn' value="提交" col-span='2'></td>
</tr>
</table>
</form>
</div>
<script src="main.bundle.js"></script>
</body>
</html>
現在專案目錄如下所示:
8,安裝babel及轉碼規則,將ES6的語法編譯為ES5的語法:
// npm一次性安裝多個依賴模組,模組之間用空格隔開
npm install --save-dev babel-core babel-loader babel-preset-env babel-preset-react
9,此時命令列進入該專案根目錄,輸入 npm run server命令,會問你
另外,控制檯也列印了驗證對應的提示訊息
由於以webpack-dev-server啟動的,如果修改了對應的js檔案等,專案會自動及時編譯,瀏覽器會自動重新整理頁面。