vue+ typescript 使用parcel 构建
parcel 是一个零配置的前端构建工具,相比webpack 更快,同时使用简单以下是
一个简单的使用typescript 开发vue 应用,同时使用parcel 构建,同时集成了docker
构建,代码很简单,同时会有一些碰到问题的解决
项目
说明parcel 是零配置的,我们基本不需要配置多少,基本都是自动的
- 项目结构
├── Dockerfile
├── README.md
├── css
│ ├── index.css
│ └── login.css
├── docker-compose.yaml
├── images
│ └── app.png
├── index.html
├── nginx.conf
├── package.json
├── src
│ ├── app.vue
│ ├── app.vue.d.ts
│ ├── index.ts
│ └── user.js
├── tsconfig.json
├── types
│ └── vue.shims.d.ts
└── yarn.lock
- 项目说明
src 为代码,app.vue 为一个简单的vue 组件,app.vue.d.ts 是自动生成的typescript 定义(使用vuetype),index.ts 为入口,user.js 为
一个es6的模块(主要是测试混合集成),css 以及image 为一些样式文件以及图片 - 代码说明
package.json
{
"name": "first",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"devDependencies": {
"@types/shortid": "^0.0.29",
"@types/vue": "^2.0.0",
"@vue/component-compiler-utils": "^3.0.2",
"parcel-bundler": "^1.12.4",
"sass": "^1.23.3",
"typescript": "^3.7.2",
"vue-template-compiler": "^2.6.10"
},
"scripts": {
"start": "parcel index.html",
"vue-type": "vuetype --watch src",
"clean": "rm -rf build/mylogin",
"build": "NODE_ENV=production npm run clean && parcel build --no-source-maps index.html --out-dir build/mylogin"
},
"dependencies": {
"shortid": "^2.2.15",
"vue": "^2.6.10",
"vue-class-component": "^7.1.0",
"vue-hot-reload-api": "^2.3.4",
"vuetype": "^0.3.2"
}
}
src/index.ts
import shortid from "shortid"
import { UserLogin } from "./user"
import Vue from "vue"
import App from "./app.vue"
class User {
public id: string;
public userLogin: UserLogin;
constructor(public name: string, public age: number) {
this.name = name;
this.age = age;
this.id = shortid.generate();
this.userLogin = new UserLogin();
}
render() {
// let that =this;
window.onload = function () {
// let token = that.userLogin.token;
// let content=`${that.name}----${that.age}----${that.id}---${token}`
new Vue(App).$mount('#content')
}
}
}
var user = new User("dalong", 333)
user.render()
src/user.js
import shortid from "shortid"
class UserLogin {
constructor() {
this.token = shortid.generate();
}
login() {
console.log("login", this.token)
}
}
export default UserLogin
export {
UserLogin
}
src/app.vue
<template >
<div class="container">Hello {{bundler}},token info {{token}}</div>
</template>
<script lang="ts">
import Vue from "vue";
import { UserLogin } from "./user";
import Component from "vue-class-component";
@Component
export default class App extends Vue {
bundler = "demo";
token = "";
data() {
return {
bundler: "Parcel",
token: new UserLogin().token,
version: "v1"
};
}
}
</script>
<style lang="scss" scoped>
.container {
color: green;
}
</style>
使用
- 安装依赖
yarn
- 生成组件ts 定义
yarn vue-type
- live 模式运行
yarn start
效果


- docker 运行
dockerfile
FROM openresty/openresty:alpine
COPY nginx.conf /usr/local/openresty/nginx/conf/
COPY build/mylogin/ /usr/local/openresty/nginx/html/
EXPOSE 80
EXPOSE 443
EXPOSE 88
nginx 配置
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
gzip_min_length 2k;
gzip_buffers 4 16k;
gzip_comp_level 8;
gzip_types text/plain text/css image/png application/javascript image/jpeg image/gif;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
root html;
index index.html index.htm;
}
location /ip {
default_type text/html;
content_by_lua_block{
ngx.say(ngx.var.remote_addr)
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
docker-compose文件
version: "3"
services:
app:
build: ./
image: dalongrong/parcel-demoapp
ports:
- "80:80"
- docker 运行
yarn build
docker-compose build
docker-compose up -d
几个问题
- vue 组件import 提示无法找到
解决方法:
使用vuetype 生成类型定义
或者添加 vue vue.shims.d.ts
内容
declare module "*.vue" {
import Vue from "vue";
export default Vue;
}
同时tsconfig.json 添加
"typeRoots": [
"./src"
"./node_modules/vue/types",
],
参考资料
https://github.com/rongfengliang/parcel-learning
https://github.com/parcel-bundler/parcel
https://github.com/ktsn/vuetype
https://github.com/vuejs/vue/issues/5298
https://github.com/vuejs/vue-cli/issues/1198
vue+ typescript 使用parcel 构建的更多相关文章
- Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记
前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...
- almost最好的Vue + Typescript系列02 项目结构篇
基于vue-cli 3.x,配合typescript的环境构建的新vue项目,跟以前的结构相比,有了一些变化,下面我们来简单的了解一下 基本结构: node_modules: 项目中安装的依赖模块 p ...
- vue源码分析—Vue.js 源码构建
Vue.js 源码是基于 Rollup 构建的,它的构建相关配置都在 scripts 目录下.(Rollup 中文网和英文网) 构建脚本 通常一个基于 NPM 托管的项目都会有一个 package.j ...
- VUE2 第六天学习--- vue单文件项目构建
阅读目录 VUE2 第六天学习--- vue单文件项目构建 回到顶部 VUE2 第六天学习--- vue单文件项目构建 VUE单文件组件在Vue项目中,然后使用 new Vue({el: '#cont ...
- Vue + TypeScript + ElementUI 封装表头查询组件
前段时间有朋友私信我 Vue + TypeScript 的问题,然后就打算写一篇 Vue + TypeScript 封装组件的文章 正好公司项目中需要封装一个表头查询组件,就拿出来分享一下~ 组件的整 ...
- vue + typescript 项目起手式
https://segmentfault.com/a/1190000011744210 2017-10-27 发布 vue + typescript 项目起手式 javascript vue.js t ...
- Vue+Typescript中在Vue上挂载axios使用时报错
Vue+Typescript中在Vue上挂载axios使用时报错 在vue项目开发过程中,为了方便在各个组件中调用axios,我们通常会在入口文件将axios挂载到vue原型身上,如下: main.t ...
- 使用Vue-cli3搭建Vue+TypeScript项目
一,创建项目 使用 npm 安装 vue-cli 3 和typescript npm i -g @vue/cli typescript 使用vue create命令快速搭建新项目的脚手架 vue cr ...
- Vue.js 源码构建(三)
Vue.js 源码是基于 Rollup 构建的,它的构建相关配置都在 scripts 目录下. 构建脚本 通常一个基于 NPM 托管的项目都会有一个 package.json 文件,它是对项目的描述文 ...
随机推荐
- 记一次难忘的排错debug经历(找了5天左右)(涉及内存覆盖)
strcpy和memcpy都没有处理内存覆盖问题. 函数描述 The memcpy function copies count bytes of src to dest. If the source ...
- 解决windows server 2008R2自动关机
原因:找到Windows Licensing Monitoring Service服务 是这服务在作祟,这服务是Windows软件许可状态.任务管理器查看有wlms.exe进程. 使用C:\Windo ...
- pyqt助手中安装Qt帮助文档
一.个人安装环境 1.Windows7x64_SP1 2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 4.通过Anaco ...
- 目标检测 <二> TensorFlow安装
一:创建TensorFlow工作环境目录 1. 在anconda安装目录下找到envs目录然后进入 2. 在当前目录下创建一个文件夹改名为tensorflow 二: 创建TensorFlow工作环境 ...
- Visual Studio2017专业版和企业版密钥
Professional: KBJFW-NXHK6-W4WJM-CRMQB-G3CDH Enterprise: NJVYC-BMHX2-G77MM-4XJMR-6Q8QF
- CSS之flex布局和边框阴影
flex布局 main axis:主轴:cross axis:交叉轴 容器的子元素自动成为容器成员,成为flex 项目(item) flex容器属性 flex-direction 该属性决定主轴的 ...
- Postman安装使用
下载链接:https://www.getpostman.com/downloads/ 选择下载的版本 postman基础功能介绍 collection在postman里面相当于一个文件夹,可以把同一个 ...
- Blend Brush介绍
原文:Blend Brush介绍 这篇文章会介绍 Blend怎么设置Brush 全局画刷 1)blend面板的介绍 这5个rectangle分别对应 blend中的 5个设置 1 设置无颜色 2 设置 ...
- WPF 精修篇 获取系统颜色和字体样式
原文:WPF 精修篇 获取系统颜色和字体样式 看效果 <Grid> <Rectangle Fill="{DynamicResource {x:Static SystemCo ...
- vue基础之data
使用 调用data onLoad(option) { _self = this; _self.$data.xxxx = "te"; } 绑定节点 元素~~~~ <input ...