详解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 文件夹选择框的两种解决方案
Jul 01 Javascript
jQuery学习笔记之Helloworld
Dec 22 Javascript
使用jquery为table动态添加行的实现代码
Mar 30 Javascript
jQuery EasyUI datagrid实现本地分页的方法
Feb 13 Javascript
js实现类似新浪微博首页内容渐显效果的方法
Apr 10 Javascript
JQuery记住用户名密码实现下次自动登录功能
Apr 27 Javascript
聊一聊JS中的prototype
Sep 29 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
Nov 25 Javascript
jQuery实现的弹幕效果完整实例
Sep 06 jQuery
微信小程序progress组件使用详解
Jan 31 Javascript
小程序接口的promise化的实现方法
Dec 11 Javascript
vue的hash值原理也是table切换实例代码
Dec 14 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中const与define的应用区别
2013/06/18 PHP
Linux下PHP加速器APC的安装与配置笔记
2014/10/24 PHP
php实现用于计算执行时间的类实例
2015/04/18 PHP
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
actionscript与javascript的区别
2011/05/25 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
jquery 为a标签绑定click事件示例代码
2014/06/23 Javascript
原生JS和JQuery动态添加、删除表格行的方法
2015/05/28 Javascript
基于jquery步骤进度条源码分享
2015/11/12 Javascript
Javascript操作表单实例讲解(下)
2016/06/20 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
2017/06/20 Javascript
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
解决百度Echarts图表坐标轴越界的方法
2018/10/17 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
详解vue项目打包步骤
2019/03/29 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
[03:02]安得倚天剑,跨海斩长鲸——中国军团出征DOTA2国际邀请赛
2018/08/14 DOTA
Python格式化css文件的方法
2015/03/10 Python
python开发之tkinter实现图形随鼠标移动的方法
2015/11/11 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
python图书管理系统
2020/04/05 Python
使用Python和xlwt向Excel文件中写入中文的实例
2018/04/21 Python
python opencv minAreaRect 生成最小外接矩形的方法
2019/07/01 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
python入门之基础语法学习笔记
2020/02/08 Python
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
合作协议书范本
2014/10/25 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
优秀班集体事迹材料
2014/12/25 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
军事博物馆观后感
2015/06/05 职场文书
深入理解redis中multi与pipeline
2021/06/02 Redis
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript