webpack打包ng2 英雄指南

概述

ng2英雄指南相關(guān)問題 這篇記錄的是在實(shí)操 英雄指南過程中遇到的問題以及解決方法,后來在社區(qū)中詢問 【雪狼】, 實(shí)際開發(fā)ng過程中一般使用哪種成熟打包配置工具盼砍,被告知可以使用 webpack, Angular-CLI。 經(jīng)過查看幾個(gè)github ng2入門項(xiàng)目,確實(shí)是用webpack打包鲜漩。所以,就倒騰 如何在 英雄指南中使用webapck集惋, 官方使用的是SystemJS宇整。

如有對(duì)webpack不清楚的,強(qiáng)烈建議參考 中文官方文檔 WEBPACK簡(jiǎn)介 或者按照我的例子實(shí)操下 Angular2開發(fā)基礎(chǔ)之Webpack

完整代碼 -> ng2-tour-of-heroes項(xiàng)目

webpack打包 英雄指南

Angular2開發(fā)基礎(chǔ)之Webpack講解了如何配置基本的webpack.config.js芋膘, 然而鳞青,在【英雄指南】完成到最后霸饲,內(nèi)容繁多,ts, css, html各種文件臂拓,如何把css厚脉, html等文件也打包進(jìn)入webpack中呢? 這就需要新的配置了胶惰。

package.json

相比之前的package.json, 內(nèi)容有很大變化傻工。

"scripts": {
    "build": "webpack --progress",
    "build:prod": "webpack -p --progress",
    "postinstall": "typings install",
    "server": "webpack-dev-server --inline --progress"
  }

刪除 "dependencies": 中的systemjs相關(guān)內(nèi)容, "devDependencies"中添加新依賴庫

"devDependencies": {
    "angular2-template-loader": "^0.4.0",
    "awesome-typescript-loader": "^2.2.4",
    "css-loader": "^0.23.1",
    "extract-text-webpack-plugin": "^1.0.1",
    "html-loader": "^0.4.3",
    "raw-loader": "^0.5.1",
    "style-loader": "^0.13.1",
    "html-webpack-plugin": "^2.24.1",
    "ts-loader": "^0.9.5",
    "typescript": "^2.0.3",
    "typings": "^1.4.0",
    "webpack": "^1.13.3",
    "webpack-dev-server": "^1.16.2"
  }

安裝依賴庫

npm install

目錄更新

原本的英雄指南目錄是在一個(gè)app目錄中的,但是要稍微區(qū)分下孵滞,修改后的目錄結(jié)構(gòu)如下:

目錄更新

其中app目錄包含了【英雄指南】中的所ts中捆, css, html文件坊饶。

webpack.config.js

千呼萬喚才出來-webpack.config.js, 強(qiáng)烈推薦查看 ng2中文官方文檔泄伪!Webpack簡(jiǎn)介 其中有詳細(xì)的說明。
針對(duì) 【英雄指南】匿级,只需要簡(jiǎn)化點(diǎn)的配置蟋滴。

var path = require('path');
var webpack = require('webpack');

var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = {

    entry: './src/app/main.ts',
    output: {
        path: root('dist'),
        filename: 'app.bundle.js'
    },
    resolve: {
        extensions: ['', '.js', '.ts']
    },
    module: {
        loaders: [
            {
                test: /\.ts$/,
                loaders: ['awesome-typescript-loader', 'angular2-template-loader']
            },
            {
                test: /\.css$/,
                exclude: root('src', 'app'),
                loader: ExtractTextPlugin.extract({fallbackLoader: 'style-loader', loader: ['css']})
            },

            // all css required in src/app files will be merged in js files
            {
                test: /\.css$/,
                include: root('src', 'app'),
                loader: 'raw'
            },

            // support for .html as raw text
            {
                test: /\.html$/,
                loader: 'raw',
                exclude: root('src', 'index.html'),
                include: root('src', 'app')
            }
        ]
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: './src/index.html'
        }),
        new ExtractTextPlugin({filename: 'css/[name].[hash].css'})
    ]
};

// Helper functions
function root(args) {
    args = Array.prototype.slice.call(arguments, 0);
    return path.join.apply(path, [__dirname].concat(args));
}

去除system.js

moudleId

要webpack正常打包,還需要清除systemjs的東西痘绎,如index.html中的鏈接津函,以及app/xxx.ts中的moudle.id。
原因是SystemJS和Webpack處理ng2的文件相對(duì)路徑是不一樣的孤页。
之前的 【英雄指南】中某個(gè) app.dashborad.component.ts中會(huì)存在 moudle.id尔苦,但是webpack就不需要這個(gè)了。
參考 相對(duì)于組件的路徑

Webpack: 加載模板和樣式表
Webpack 開發(fā)者可以采用 moduleId 的另一個(gè)替代方案行施。通過讓組件元數(shù)據(jù)的 template 和 styles / styleUrls 屬性以 ./ 開頭允坚,并使其指向相對(duì)于組件的 URL ,可以在運(yùn)行期間為它們加載模板和樣式表悲龟。

import { Component } from '@angular/core';

import '../../public/css/styles.css';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent { }

index.html

使用Webpack可以讓index頁面屋讶,不用引入 <script>, <link>之類的,借助插件依賴庫等须教,就能自動(dòng)插入到目標(biāo)js中皿渗。所以,最后的【英雄指南】index.html內(nèi)容很少轻腺。

<html>
<head>
    <base href="/">
    <title>Angular2 QuickStart</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>

<body>
<my-app>Loading...</my-app>
</body>
</html>

dist目錄中的index.html會(huì)添加相關(guān)的 引用乐疆。

<script type="text/javascript" src="app.bundle.js"></script></body>

運(yùn)行應(yīng)用

上述改造完成!需要編譯檢驗(yàn)效果贬养。

啟動(dòng)server

npm run server

編譯完成挤土,沒出現(xiàn)錯(cuò)誤后,在瀏覽器中輸入 http://localhost:8080/ 就能看到效果误算。而且仰美,你修改ts文件后就會(huì)自動(dòng)編譯迷殿,自動(dòng)reload頁面。
注意咖杂,使用webpack-dev-server是不會(huì)編譯dist目錄的庆寺,是在內(nèi)存中生成運(yùn)行的,不在磁盤上诉字。

生成dist

npm run build  / npm run build:prod

生成的dist目錄懦尝,只有兩個(gè)文件 app.bundle.js, index.html 其他的都不見,app目錄中的html壤圃,css都在js中陵霉。
你可根據(jù)需求配置。
但是有個(gè)小問題伍绳,在dist中直接打開Index.html 只會(huì)顯示 【Loading ...】, F12調(diào)試發(fā)現(xiàn)踊挠,錯(cuò)誤顯示,沒有找到app.bundle.js墨叛, 這個(gè)有點(diǎn)奇怪止毕。有知道的同學(xué)模蜡,告知一下漠趁,如何在目標(biāo)文件中,直接打開index.html正確顯示內(nèi)容忍疾!

代碼

老地方闯传, 其中ng2-tour-of-heroes就是!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市卤妒,隨后出現(xiàn)的幾起案子甥绿,更是在濱河造成了極大的恐慌,老刑警劉巖则披,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件共缕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡士复,警方通過查閱死者的電腦和手機(jī)图谷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阱洪,“玉大人便贵,你說我怎么就攤上這事∪咻” “怎么了承璃?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蚌本。 經(jīng)常有香客問我盔粹,道長(zhǎng)隘梨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任舷嗡,我火速辦了婚禮出嘹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咬崔。我一直安慰自己税稼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布垮斯。 她就那樣靜靜地躺著郎仆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪兜蠕。 梳的紋絲不亂的頭發(fā)上扰肌,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音熊杨,去河邊找鬼曙旭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛晶府,可吹牛的內(nèi)容都是我干的桂躏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼川陆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼剂习!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起较沪,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤鳞绕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后尸曼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體们何,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年控轿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冤竹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡解幽,死狀恐怖贴见,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情躲株,我是刑警寧澤片部,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響档悠,放射性物質(zhì)發(fā)生泄漏廊鸥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一辖所、第九天 我趴在偏房一處隱蔽的房頂上張望惰说。 院中可真熱鬧,春花似錦缘回、人聲如沸吆视。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啦吧。三九已至,卻和暖如春拙寡,著一層夾襖步出監(jiān)牢的瞬間授滓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工肆糕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留般堆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓诚啃,卻偏偏與公主長(zhǎng)得像淮摔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绍申,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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

  • GitChat技術(shù)雜談 前言 本文較長(zhǎng)噩咪,為了節(jié)省你的閱讀時(shí)間顾彰,在文前列寫作思路如下: 什么是 webpack,它要...
    蕭玄辭閱讀 12,689評(píng)論 7 110
  • 寫在開頭 先說說為什么要寫這篇文章, 最初的原因是組里的小朋友們看了webpack文檔后, 表情都是這樣的: (摘...
    Lefter閱讀 5,285評(píng)論 4 31
  • 構(gòu)建一個(gè)小項(xiàng)目——FlyBird涨享,學(xué)習(xí)webpack和react筋搏。(本文成文于2017/2/25) 從webpac...
    布蕾布蕾閱讀 16,817評(píng)論 31 98
  • 版權(quán)聲明:本文為博主原創(chuàng)文章吁讨,未經(jīng)博主允許不得轉(zhuǎn)載髓迎。 webpack介紹和使用 一、webpack介紹 1建丧、由來 ...
    it筱竹閱讀 11,113評(píng)論 0 21
  • webpack 介紹 webpack 是什么 為什么引入新的打包工具 webpack 核心思想 webpack 安...
    yxsGert閱讀 6,463評(píng)論 2 71