详解webpack+angular2开发环境搭建


Posted in Javascript onJune 28, 2017

刚搭建完一个webpack+angular2环境,由于angular及webpack官网上没有一个折中的搭建方案,所以只能摸索着搭建,中间遇到一些坑,遂总结记录下来,以供交流。

搭建完后的项目初步环境如下:

app
----app.component.ts
----app.module.ts
----main.ts
index.html
package.json
tsconfig.json
webpack.config.js

app.componnet.ts:组件文件。angular2应用是由组件构成,组件控制视图;

import { Component } from '@angular/core';
@Component({
 selector: 'my-app',
 template: `
  <h1>{{title}}</h1>
  <h2>My favorite hero is: {{myHero}}</h2>
  `
})
// 使用变量初始化方式
export class AppComponent {
 title = 'Tour of Heroes';
 myHero = 'Windstorm';
}

app.module.ts:应用跟模块。angular是模块化,拥有自己的模块系统,被称为angular模块或NgModules(深入了解);//缺少下述模块引入,会输出"Uncaught reflect-metadata shim is required when using class decorators"的错误

import 'core-js/es6';
import 'core-js/es7/reflect';
import 'zone.js/dist/zone';
//引入NgModule装饰器
import { NgModule }   from '@angular/core';
//引入浏览器模块
import { BrowserModule } from '@angular/platform-browser';
//引入创建的component
import { AppComponent } from './app.component';


@NgModule({
 imports:   [ BrowserModule ],
 declarations: [ AppComponent ],
 bootstrap:  [ AppComponent ]
})
export class AppModule { }

 main.ts:用于引导跟模块启动应用;

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
 import { AppModule }       from './app.module';
 //引导跟模块启动应用
platformBrowserDynamic().bootstrapModule(AppModule);

index.html:angular应用宿主页面;
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width" />
  <title>small胖的博客</title>
</head>
<body>
  <my-app></my-app>
  <script src="dist/bundle.js"></script>
</body>
</html>

package.json:一个标准化的npm说明文件,其中包含诸如当前应用的依赖包、自定义的脚本命令等,在cmd终端可用npm init自动创建该文件;

注意,此处如果引入的angular模块版本是2.4.X,则会报错“Angular2 + Jspm.io : reflect-metadata shim is required when using class decorators”,产生此坑的具体原因尚不清楚,希望有朋友一起交流。

{
 "name": "blogcode",
 "version": "1.0.0",
 "description": "",
 "main": "webpack.config.js",
 "dependencies": {
  "ts-loader": "2.0.0",
  "@angular/common": "2.1.2",
  "@angular/compiler": "2.1.2",
  "@angular/core": "2.1.2",
  "@angular/platform-browser": "2.1.2",
  "@angular/platform-browser-dynamic":"2.1.2",
  "rxjs": "5.0.0-beta.12",
  "zone.js": "0.6.26",
  "core-js": "^2.4.1"
 },
 "devDependencies": {
  "webpack": "^2.2.1",
  "@types/core-js": "^0.9.35",
  "typescript": "^2.1.5",
  "webpack": "^2.2.0",
  "webpack-dev-server": "^2.3.0"
 },
 "scripts": {
  "test": "echo \"Error: no test specified\" && exit 1"
 },
 "repository": {
  "type": "git",
  "url": "https://git.coding.net/frankshin/xudengwei.git"
 },
 "author": "",
 "license": "ISC"
}

tsconfig.json:用于定义typescript编译成ES5的各项参数;

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es5",
    "moduleResolution": "node",
    "noImplicitAny": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "sourceMap": true,
    "declaration": false
  },
  "buildOnSave": false,
  "compileOnSave": false,
  "exclude": [
    "node_modules"
  ]
}

webpack.config.js:一个标准化的commonjs文件,用于配置webpack编译打包的参数。

module.exports = {
  entry: "./app/main.ts",
  output: {
    path: __dirname + '/dist',
    filename: "bundle.js"
  },
  module: {
  rules: [
    {
     test: /\.tsx?$/,
     loader: 'ts-loader',
     exclude: /node_modules/,
    },
  ]
  },
  resolve: {
   extensions: [".tsx", ".ts", ".js"]
  }
};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript基础第一章 JavaScript与用户端
Jul 22 Javascript
jQuery 全选/反选以及单击行改变背景色实例
Jul 02 Javascript
JavaScript获取function所有参数名的方法
Oct 30 Javascript
vue制作加载更多功能的正确打开方式
Oct 12 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
Nov 02 Javascript
js实现炫酷的左右轮播图
Jan 18 Javascript
bootstrap PrintThis打印插件使用详解
Feb 20 Javascript
Vue下的国际化处理方法
Dec 18 Javascript
vue的全局提示框组件实例代码
Feb 26 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
Oct 24 Javascript
Jquery 获取相同NAME 或者id删除行操作
Aug 24 jQuery
ES6中的类(Class)示例详解
Dec 09 Javascript
JavaScript中最常用的10种代码简写技巧总结
Jun 28 #Javascript
AngularJS页面带参跳转及参数解析操作示例
Jun 28 #Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
Jun 28 #Javascript
JavaScript循环_动力节点Java学院整理
Jun 28 #Javascript
JavaScript方法_动力节点Java学院整理
Jun 28 #Javascript
微信小程序后台解密用户数据实例详解
Jun 28 #Javascript
JavaScript箭头函数_动力节点Java学院整理
Jun 28 #Javascript
You might like
PHP中Date获取时间不正确怎么办
2008/06/05 PHP
php+mysql删除指定编号员工信息的方法
2015/01/14 PHP
php+mysql数据库查询实例
2015/01/21 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
2015/11/09 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
CI框架中$this-&gt;load-&gt;library()用法分析
2016/05/18 PHP
jquery不支持toggle()高(新)版本的问题解决
2016/09/24 PHP
CakePHP框架Model关联对象用法分析
2017/08/04 PHP
Nigma vs Alliance BO5 第五场2.14
2021/03/10 DOTA
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
简单几步实现返回顶部效果
2016/12/05 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
2016/12/17 Javascript
Vue和Bootstrap的整合思路详解
2017/06/30 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
利用three.js画一个3D立体的正方体示例代码
2017/11/19 Javascript
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
详解使用WebPack搭建React开发环境
2019/08/06 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
Python中的字典遍历备忘
2015/01/17 Python
实现python版本的按任意键继续/退出
2016/09/26 Python
Python操作使用MySQL数据库的实例代码
2017/05/25 Python
python语音识别实践之百度语音API
2018/08/30 Python
手把手教你实现一个canvas智绘画板的方法
2019/03/04 HTML / CSS
廉价航班、机票和酒店:JustFly
2018/02/07 全球购物
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
父亲生日宴会答谢词
2014/01/10 职场文书
实习生岗位职责
2014/04/12 职场文书
青春励志演讲稿
2014/04/29 职场文书
团结就是力量演讲稿
2014/05/21 职场文书
党员个人剖析材料2014
2014/10/08 职场文书
深入讲解数据库中Decimal类型的使用以及实现方法
2022/02/15 MySQL