用webpack構(gòu)建的多頁應(yīng)用項(xiàng)目模板(腳手架)

github地址传货,覺得好的話給個(gè)star吧!

  • 根據(jù)官方文檔進(jìn)行配置(webpack3)

  • 具有自動(dòng)編譯宏娄、打包问裕、熱更新、代碼檢查孵坚、服務(wù)器環(huán)境預(yù)覽僻澎、自動(dòng)部署等功能

  • 你可以在此項(xiàng)目中正常使用vuereact等前端框架

下面來簡單的介紹一下搭建此項(xiàng)目的步驟和思路

項(xiàng)目整體結(jié)構(gòu)為:
項(xiàng)目結(jié)構(gòu)

此項(xiàng)目的使用方法:

  #以下命令均可在package.json和deploy.sh中進(jìn)行配置

  #開發(fā)環(huán)境下運(yùn)行
  npm run dev

  #使用Eslint進(jìn)行代碼檢測(cè)
  npm run lint

  #打包構(gòu)建
  npm run build

  #服務(wù)器環(huán)境下預(yù)覽
  npm run serve
  
  #以下命令不需要運(yùn)行 npm run build十饥,此腳本會(huì)自動(dòng)幫你運(yùn)行
  #自動(dòng)打包部署到測(cè)試環(huán)境
  sudo sh ./deploy.sh build dev

  #自動(dòng)打包部署到生產(chǎn)環(huán)境
  sudo sh ./deploy.sh build prod

  #如果服務(wù)器中沒有對(duì)應(yīng)的目錄,你可以運(yùn)行下面的代碼在部署時(shí)自動(dòng)在服務(wù)器上生成一個(gè)目錄
  sudo sh ./deploy.sh build prod(or dev) newDir

首先你需要使用npm來下載一些依賴祖乳,這對(duì)于經(jīng)常使用npm的同學(xué)來說并不陌生逗堵,具體的一些依賴在package.json文件里:

{
  "name": "webpack-template",
  "version": "1.0.0",
  "description": "webpack template",
  "private": true,
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "cross-env NODE_ENV=dev webpack-dev-server --hot --colors",
    "build": "cross-env NODE_ENV=prod webpack -p",
    "lint": "cross-env NODE_ENV=lint webpack-dev-server --open",
    "serve": "http-server ./dist -p 8888 -o"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "autoprefixer": "^7.2.4",
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.2",
    "babel-plugin-transform-es2015-spread": "^6.22.0",
    "babel-preset-env": "^1.6.1",
    "clean-webpack-plugin": "^0.1.17",
    "cross-env": "^5.1.3",
    "css-loader": "^0.28.7",
    "eslint": "^4.14.0",
    "eslint-loader": "^1.9.0",
    "extract-text-webpack-plugin": "^3.0.2",
    "file-loader": "^1.1.6",
    "html-loader": "^0.5.4",
    "html-webpack-plugin": "^2.30.1",
    "http-server": "^0.10.0",
    "postcss-loader": "^2.0.10",
    "style-loader": "^0.19.1",
    "url-loader": "^0.6.2",
    "webpack": "^3.10.0",
    "webpack-dev-server": "^2.9.7",
    "webpack-merge": "^4.1.1"
  }
}

在使用時(shí),你只需要npm install就可以了眷昆。

項(xiàng)目中蜒秤,webpack.config.js為webpack的配置文件,當(dāng)你在命令行中輸入具體的命令時(shí)亚斋,由它來進(jìn)行一些任務(wù)分配作媚,具體的代碼為:


// 獲取環(huán)境命令,并去除首尾空格
const env = process.env.NODE_ENV.replace(/(\s*$)|(^\s*)/ig,"");

// 根據(jù)環(huán)境變量引用相關(guān)的配置文件
module.exports = require(`./config/webpack.config.${env}.js`)

config/config.js中,用來保存一些全局的變量帅刊,比如要進(jìn)行打包的html模板纸泡,一些路徑等信息,在這里我只配置了html模板:

/**
 * 全局配置文件
 */
 module.exports = {
   // 項(xiàng)目中的html文件赖瞒,不需要后綴
   HTMLDirs:[
       "a",  //a.html
       "b"  //b.html
   ]
 }

config/webpack.config.base.js是webpack的基本配置女揭,包括打包編譯時(shí)的模板配置,loaders栏饮、打包輸出路徑等信息:

/**
 * webpack 基礎(chǔ)配置
 */
const webpack = require('webpack');

const path = require("path");
// 引入模板插件
const HTMLWebpackPlugin = require("html-webpack-plugin");
//  環(huán)境變量
const env = process.env.NODE_ENV
// 提取js中的css
const ExtractTextPlugin = require('extract-text-webpack-plugin')
// 引入config.js
const config = require("./config");
// 通過 html-webpack-plugin 生成的 HTML 集合
let HTMLPlugins = [];
// 入口文件集合
let Entries = {}

// 生成多頁面的集合
config.HTMLDirs.forEach((page) => {
  const htmlPlugin = new HTMLWebpackPlugin({
    filename: `${page}.html`,
    template: path.resolve(__dirname, `../src/page/${page}.html`),
    chunks: [page, 'commons'],
    minify: {
      "removeAttributeQuotes": true,
      "removeComments": true,
      "removeEmptyAttributes": true,
    }
  });
  HTMLPlugins.push(htmlPlugin);
  Entries[page] = path.resolve(__dirname, `../src/javascript/${page}.js`);
})

module.exports = {
  // 入口文件
  entry: Entries,
  // 啟用 sourceMap
  devtool: "cheap-module-source-map",
  // 輸出文件
  output: {
    filename: "javascript/[name].bundle.[hash].js",
    path: path.resolve(__dirname, "../dist"),
    publicPath: '/'
  },
  resolve: {
    extensions: ['.js'] // 配置簡寫吧兔,配置過后,書寫該文件路徑的時(shí)候可以省略文件后綴
  },
  // 加載器
  module: {
    rules: [{
        test: /\.html$/,
        use: [{
          loader: 'html-loader',
          options: {
            attrs: ['img:src', 'link:href'],
            interpolate: true
          }
        }]
      }, 
      {
        // 對(duì) css 后綴名進(jìn)行處理
        test: /\.css$/,
        // 不處理 node_modules 文件中的 css 文件
        exclude: /node_modules/,
        /* 內(nèi)嵌style形式 */
        // use: [{
        //   loader: 'style-loader'
        // }, {
        //   loader: 'css-loader',
        //   options: {
        //     // 開啟 css 壓縮
        //     minimize: true,
        //   }
        // }]
        /* link形式 (按照官方配置css內(nèi)圖片不能加載袍嬉,待解決) https://doc.webpack-china.org/loaders/style-loader*/
        // use: [
        //   { loader: "style-loader/url" ,options: { convertToAbsoluteUrls: true }},
        //   { loader: "file-loader", options: { outputPath: 'css/'}},
        // ]
        /* link打包之后引入對(duì)應(yīng)的css形式(dev模式下為內(nèi)嵌style形式) */
        use: env === 'prod'
          ? ExtractTextPlugin.extract({
            fallback: 'style-loader',
            use: ['css-loader']
          })
          : ['style-loader', 'css-loader']
      },
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: [{
          loader: 'babel-loader',
          options: {
            presets: ['env']
          }
        }],
      },
      {
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
        use: [{
          loader: "url-loader",
          options: {
            limit: 10000,
            // 打包生成圖片的名字
            name: "image/[name].[hash].[ext]",
          }
        }],
      },
      {
        test: /\.(woff|woff2|eot|ttf|otf)$/,
        use: ["url-loader"]
      }
    ],
  },
  // 插件
  plugins: [
    // new webpack.BannerPlugin('Created by YourName.')
    // 自動(dòng)生成 HTML 插件
    ...HTMLPlugins
  ],
}

config/webpack.config.base.jsconfig/webpack.config.dev.js分別為生產(chǎn)環(huán)境和測(cè)試環(huán)境下的配置境蔼,config/webpack.config.lint.js是使用ESlint對(duì)代碼進(jìn)行檢查的配置,具體可在github中查看,使用方法和教程都在上面伺通,歡迎大家提issue箍土!

·

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市罐监,隨后出現(xiàn)的幾起案子涮帘,更是在濱河造成了極大的恐慌,老刑警劉巖笑诅,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件调缨,死亡現(xiàn)場(chǎng)離奇詭異疮鲫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)弦叶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門俊犯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人伤哺,你說我怎么就攤上這事燕侠。” “怎么了立莉?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵绢彤,是天一觀的道長。 經(jīng)常有香客問我蜓耻,道長茫舶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任刹淌,我火速辦了婚禮饶氏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘有勾。我一直安慰自己疹启,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布蔼卡。 她就那樣靜靜地躺著喊崖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雇逞。 梳的紋絲不亂的頭發(fā)上贷祈,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音喝峦,去河邊找鬼势誊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谣蠢,可吹牛的內(nèi)容都是我干的粟耻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼眉踱,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼挤忙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谈喳,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤册烈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后婿禽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赏僧,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡大猛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了淀零。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挽绩。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖驾中,靈堂內(nèi)的尸體忽然破棺而出唉堪,到底是詐尸還是另有隱情,我是刑警寧澤肩民,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布唠亚,位于F島的核電站,受9級(jí)特大地震影響持痰,放射性物質(zhì)發(fā)生泄漏灶搜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一共啃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暂题,春花似錦移剪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至言津,卻和暖如春攻人,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悬槽。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國打工怀吻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人初婆。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓蓬坡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親磅叛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子屑咳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 最近在學(xué)習(xí) Webpack,網(wǎng)上大多數(shù)入門教程都是基于 Webpack 1.x 版本的,我學(xué)習(xí) Webpack 的...
    My_Oh_My閱讀 8,189評(píng)論 40 247
  • 無意中看到zhangwnag大佬分享的webpack教程感覺受益匪淺,特此分享以備自己日后查看弊琴,也希望更多的人看到...
    小小字符閱讀 8,178評(píng)論 7 35
  • GitChat技術(shù)雜談 前言 本文較長兆龙,為了節(jié)省你的閱讀時(shí)間,在文前列寫作思路如下: 什么是 webpack敲董,它要...
    蕭玄辭閱讀 12,698評(píng)論 7 110
  • 目錄第1章 webpack簡介 11.1 webpack是什么紫皇? 11.2 官網(wǎng)地址 21.3 為什么使用 web...
    lemonzoey閱讀 1,739評(píng)論 0 1
  • 天晴了慰安,曬被子,曬物件坝橡。無意中翻出一本《感恩的心》獲獎(jiǎng)文集泻帮,是多年前我和兒子同時(shí)參加紅城征文活動(dòng)、同時(shí)獲獎(jiǎng)的一個(gè)...
    紅城客閱讀 389評(píng)論 2 4