详解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常用数组操作方法简明总结
Jun 20 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
Sep 12 Javascript
浅析JS动态创建元素【两种方法】
Apr 20 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
Jun 20 Javascript
Javascript打印局部页面实例
Jun 21 Javascript
js 上传文件预览的简单实例
Aug 16 Javascript
微信 java 实现js-sdk 图片上传下载完整流程
Oct 21 Javascript
Vue 仿QQ左滑删除组件功能
Mar 12 Javascript
JS实现DOM删除节点操作示例
Apr 04 Javascript
详解关于React-Router4.0跳转不置顶解决方案
May 10 Javascript
微信小程序文章详情功能完整实例
Jun 03 Javascript
js实现弹窗猜数字游戏
Nov 26 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
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
解析php dirname()与__FILE__常量的应用
2013/06/24 PHP
使用php测试硬盘写入速度示例
2014/01/27 PHP
php中实现精确设置session过期时间的方法
2014/07/17 PHP
自制PHP框架之设计模式
2017/05/07 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
2018/04/09 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
2018/04/20 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
javascript 使td内容不换行不撑开
2012/11/29 Javascript
jQuery侧边栏随窗口滚动实现方法
2013/03/04 Javascript
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
js中window.open打开一个新的页面
2014/08/10 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
纯JavaScript基于notie.js插件实现消息提示特效
2016/01/18 Javascript
JS加载iFrame出现空白问题的解决办法
2016/05/13 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
JS实现省市县三级下拉联动
2020/04/10 Javascript
深入理解 ES6中的 Reflect用法
2020/07/18 Javascript
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
2017/08/18 Python
对pandas的算术运算和数据对齐实例详解
2018/12/22 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
jupyter notebook 的工作空间设置操作
2020/04/20 Python
Python爬虫实现selenium处理iframe作用域问题
2021/01/27 Python
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
介绍一下Mysql的存储引擎
2015/02/12 面试题
煤矿班组长竞聘书
2014/03/31 职场文书
《忆江南》教学反思
2014/04/07 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
户籍证明书标准模板
2014/09/10 职场文书
工作时间调整通知
2015/04/24 职场文书
python 制作一个gui界面的翻译工具
2021/05/14 Python
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript