详解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 相关文章推荐
js 格式化时间日期函数小结
Mar 20 Javascript
Javascript中找到子元素在父元素内相对位置的代码
Jul 21 Javascript
javascript 兼容所有浏览器的DOM扩展功能
Aug 01 Javascript
Javascript实现颜色rgb与16进制转换的方法
Apr 18 Javascript
简介JavaScript中valueOf()方法的使用
Jun 05 Javascript
异步JS框架的作用以及实现方法
Oct 29 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
May 17 Javascript
关于动态执行代码(js的Eval)实例详解
Aug 15 Javascript
Bootstrap3多级下拉菜单
Feb 24 Javascript
菊花转动的jquery加载动画效果
Aug 19 jQuery
JavaScript函数的4种调用方法实例分析
Mar 05 Javascript
node.js 如何监视文件变化
Sep 01 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
1 Tube Radio
2021/03/02 无线电
如何用PHP实现插入排序?
2013/04/10 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
php使用$_POST或$_SESSION[]向js函数传参
2014/09/16 PHP
PHP加密解密类实例分析
2015/04/20 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
javascript 日历提醒系统( 兼容所有浏览器 )
2009/04/07 Javascript
通过$(this)使用jQuery包装后的方法或属性
2014/05/18 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
详解js类型判断
2018/05/22 Javascript
nodejs 使用 js 模块的方法实例详解
2018/12/04 NodeJs
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
vue实现的树形结构加多选框示例
2019/02/02 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
vue登录以及权限验证相关的实现
2019/10/25 Javascript
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
python算法学习之计数排序实例
2013/12/18 Python
Python生成随机数的方法
2014/01/14 Python
Python基础教程之内置函数locals()和globals()用法分析
2018/03/16 Python
Python 实现输入任意多个数,并计算其平均值的例子
2019/07/16 Python
Python爬取爱奇艺电影信息代码实例
2019/11/26 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
美国礼品卡交易网站:Cardpool
2018/08/27 全球购物
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
爱普生美国官网:Epson美国
2018/11/05 全球购物
毕业生的自我鉴定
2013/10/29 职场文书
好书伴我成长演讲稿
2014/05/14 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
关于青春的演讲稿500字
2014/08/22 职场文书
法律进社区活动总结
2015/05/07 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书