详解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和JQ的event对象区别分析
Nov 24 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
Mar 02 Javascript
JavaScript实现Base64编码转换
Apr 23 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
May 13 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
Sep 17 Javascript
网页中右键功能的实现方法之contextMenu的使用
Feb 20 Javascript
基于Vuejs和Element的注册插件的编写方法
Jul 03 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
Feb 26 Javascript
微信小程序登录session的使用
Mar 17 Javascript
jquery实现下载图片功能
Jul 18 jQuery
微信小程序开发搜索功能实现(前端+后端+数据库)
Mar 04 Javascript
Vue+penlayers实现多边形绘制及展示
Dec 24 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方法调用模式与函数调用模式简例
2011/09/20 PHP
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
PHP处理postfix邮件内容的方法
2015/06/16 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
laravel 获取当前url的别名方法
2019/10/11 PHP
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
jQuery 插件仿百度搜索框智能提示(带Value值)
2013/01/22 Javascript
jQuery点缩略图弹出层显示大图片
2015/02/13 Javascript
JavaScript判断前缀、后缀是否是空格的方法
2015/04/15 Javascript
javascript中attachEvent用法实例分析
2015/05/14 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
2017/02/21 Javascript
js实现时间轴自动排列效果
2017/03/09 Javascript
页面间固定参数,通过cookie传值的实现方法
2017/05/31 Javascript
vue 中自定义指令改变data中的值
2017/06/02 Javascript
Ionic3 UI组件之autocomplete详解
2017/06/08 Javascript
JS写谷歌浏览器chrome的外挂实例
2018/01/11 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
浅谈python日志的配置文件路径问题
2018/04/28 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
2018/10/21 Python
python 产生token及token验证的方法
2018/12/26 Python
Python GUI编程完整示例
2019/04/04 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
2019/11/27 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
详解CSS3中的box-sizing(content-box与border-box)
2019/04/19 HTML / CSS
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
美国时尚在线:Showpo
2017/09/08 全球购物
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
2015年社区科普工作总结
2015/05/13 职场文书
从事会计工作年限证明
2015/06/23 职场文书
月考总结与反思
2015/10/22 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书