webpack打包ng2 英雄指南

概述

ng2英雄指南相关问题 这篇记录的是在实操 英雄指南过程中遇到的问题以及解决方法,后来在社区中询问 【雪狼】, 实际开发ng过程中一般使用哪种成熟打包配置工具,被告知可以使用 webpack, Angular-CLI。 经过查看几个github ng2入门项目,确实是用webpack打包。所以,就倒腾 如何在 英雄指南中使用webapck, 官方使用的是SystemJS。

如有对webpack不清楚的,强烈建议参考 中文官方文档 WEBPACK简介 或者按照我的例子实操下 Angular2开发基础之Webpack

完整代码 -> ng2-tour-of-heroes项目

webpack打包 英雄指南

Angular2开发基础之Webpack讲解了如何配置基本的webpack.config.js, 然而,在【英雄指南】完成到最后,内容繁多,ts, css, html各种文件,如何把css, html等文件也打包进入webpack中呢? 这就需要新的配置了。

package.json

相比之前的package.json, 内容有很大变化。

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

删除 "dependencies": 中的systemjs相关内容, "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

目录更新

原本的英雄指南目录是在一个app目录中的,但是要稍微区分下,修改后的目录结构如下:

目录更新

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

webpack.config.js

千呼万唤才出来-webpack.config.js, 强烈推荐查看 ng2中文官方文档!Webpack简介 其中有详细的说明。
针对 【英雄指南】,只需要简化点的配置。

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的文件相对路径是不一样的。
之前的 【英雄指南】中某个 app.dashborad.component.ts中会存在 moudle.id,但是webpack就不需要这个了。
参考 相对于组件的路径

Webpack: 加载模板和样式表
Webpack 开发者可以采用 moduleId 的另一个替代方案。通过让组件元数据的 template 和 styles / styleUrls 属性以 ./ 开头,并使其指向相对于组件的 URL ,可以在运行期间为它们加载模板和样式表。

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>之类的,借助插件依赖库等,就能自动插入到目标js中。所以,最后的【英雄指南】index.html内容很少。

<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会添加相关的 引用。

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

运行应用

上述改造完成!需要编译检验效果。

启动server

npm run server

编译完成,没出现错误后,在浏览器中输入 http://localhost:8080/ 就能看到效果。而且,你修改ts文件后就会自动编译,自动reload页面。
注意,使用webpack-dev-server是不会编译dist目录的,是在内存中生成运行的,不在磁盘上。

生成dist

npm run build  / npm run build:prod

生成的dist目录,只有两个文件 app.bundle.js, index.html 其他的都不见,app目录中的html,css都在js中。
你可根据需求配置。
但是有个小问题,在dist中直接打开Index.html 只会显示 【Loading ...】, F12调试发现,错误显示,没有找到app.bundle.js, 这个有点奇怪。有知道的同学,告知一下,如何在目标文件中,直接打开index.html正确显示内容!

代码

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • GitChat技术杂谈 前言 本文较长,为了节省你的阅读时间,在文前列写作思路如下: 什么是 webpack,它要...
    萧玄辞阅读 12,663评论 7 110
  • 写在开头 先说说为什么要写这篇文章, 最初的原因是组里的小朋友们看了webpack文档后, 表情都是这样的: (摘...
    Lefter阅读 5,269评论 4 31
  • 构建一个小项目——FlyBird,学习webpack和react。(本文成文于2017/2/25) 从webpac...
    布蕾布蕾阅读 16,797评论 31 98
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 webpack介绍和使用 一、webpack介绍 1、由来 ...
    it筱竹阅读 11,025评论 0 21
  • webpack 介绍 webpack 是什么 为什么引入新的打包工具 webpack 核心思想 webpack 安...
    yxsGert阅读 6,440评论 2 71