详解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 相关文章推荐
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
Dec 02 Javascript
javascript实例分享---具有立体效果的图片特效
Jun 08 Javascript
JavaScript中用字面量创建对象介绍
Dec 31 Javascript
JavaScript把数组作为堆栈使用的方法
Mar 20 Javascript
7个jQuery最佳实践
Jan 12 Javascript
js判断复选框是否选中及选中个数的实现代码
May 30 Javascript
javascript实现电脑和手机版样式切换
Nov 10 Javascript
微信小程序城市选择及搜索功能的方法
Mar 22 Javascript
bootstrap中的导航条实例代码详解
May 20 Javascript
vue 修改 data 数据问题并实时显示操作
Sep 07 Javascript
JS绘图Flot如何实现动态可刷新曲线图
Oct 16 Javascript
vue图片裁剪插件vue-cropper使用方法详解
Dec 16 Vue.js
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中禁止单个IP与ip段访问的代码小结
2012/07/04 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
[原创]php求圆周率的简单实现方法
2016/05/30 PHP
自动最大化窗口的Javascript代码
2013/05/22 Javascript
自己封装的常用javascript函数分享
2015/01/07 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
概述VUE2.0不可忽视的很多变化
2016/09/25 Javascript
AngularJs基于角色的前端访问控制的实现
2016/11/07 Javascript
javascript编写简易计算器
2017/05/06 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
vue 点击按钮增加一行的方法
2018/09/07 Javascript
微信小程序中this.data与this.setData的区别详解
2018/09/17 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
vue实例的选项总结
2020/06/09 Javascript
解决vue项目router切换太慢问题
2020/07/19 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
python中实现定制类的特殊方法总结
2014/09/28 Python
Python抓取电影天堂电影信息的代码
2016/04/07 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
python MysqlDb模块安装及其使用详解
2018/02/23 Python
Python秒算24点实现及原理详解
2019/07/29 Python
Python Selenium截图功能实现代码
2020/04/26 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
英国复古服装和球衣购买网站:3Retro Football
2018/07/09 全球购物
平面设计师的工作职责
2013/11/21 职场文书
创先争优活动方案
2014/02/12 职场文书
大学军训感言1000字
2014/02/25 职场文书
数控专业毕业生自荐信范文
2014/03/04 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python