名称:node 版本:10.7.0
名称:npm 版本:6.1.0
名称:webpack 版本:4.16.5
名称:typescript 版本:3.0.1
名称:sass 版本:3.5.7
名称:vue 版本:3.0.0-rc.11
名称:typescript 版本:3.0.1
mkdir webtsvue
cd webtsvue
mkdir src
cd src
mkdir components
mkdir assets
cd assets
mkdir style
cd ..
cd..
npm init -y
安装:cnpm install typescript ts-loader --save-dev
安装:cnpm install webpack webpack-cli --save-dev
注意:全局安装WebPack也要在安装一次,否则css-loader会无效,webpack-cli 和webpack-cmmand 这2个模块是辅助模块,在开发时使用的,否则npm run …的时候无法运行
安装:cnpm install sass node-sass sass-loader --save-dev
安装:cnpm install webpack-dev-server --save-dev
注意:这个必须在全局安装一次,否则在运行时可能会出现无法找到路径的错误
安装:cnpm install html-webpack-plugin --save-dev
安装:cnpm install vue vue-loader vue-template-compiler css-loader vue-style-loader --save-dev
注意:vue-loader需要css-loader和vue-template-compiler,写style的时候需要vue-style-loader
安装:cnpm install style-loader
extract-text-webpack-plugin@4.0.0-beta.0 --save-dev
注意:因为写该教程的时候,默认还是3.0不支持WEBPACK4,所以要强制版本
style-loader这个加载器是分享CSS文件的插件需要的
安装:cnpm install @types/vue --save-dev
注意:我这边安装完以后,在VSCODE中还是提示无法找到VUE,所以还是使用原来的办法,添加一个.d.ts的声明文件
{
"name": "webtsvue",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"css-loader": "^1.0.0",
"html-webpack-plugin": "^3.2.0",
"sass": "^1.10.4",
"sass-loader": "^7.1.0",
"ts-loader": "^4.4.2",
"typescript": "^3.0.1",
"vue": "^2.5.17",
"vue-loader": "^15.3.0",
"vue-style-loader": "^4.1.1",
"vue-template-compiler": "^2.5.17",
"webpack": "^4.16.5",
"webpack-cli": "^3.1.0",
"webpack-dev-server": "^3.1.5"
}
}
名称:tsconfig.json
文件位置:/
原
替换/新增:
{
"compilerOptions": {
"module": "es2015",//组织代码方式
"noImplicitAny": true,//为true时,将进行强类型检查,无法推断类型时,提示错误。
"strict": true, //启用所有严格类型检查选项。
"noImplicitReturns": true, //true 时,不是函数的所有返回路径都有返回值时报错
"removeComments": true, //编译生成的 JavaScript 文件是否移除注释
"preserveConstEnums": true,
"sourceMap": true, //编译文件对应关系
"moduleResolution": "node",//决定如何处理模块。
"target": "es5"//编译目标平台
},
"include": [//包含的编译目录
"src/**/*"
],
"exclude": [ //排出不编译的目录
"node_modules",
"**/*.spec.ts"
]
}
提示:关于配置文件的详细 中文说明
名称:webpack.config.js
文件位置:/
主要修改内容
原
替换/新增
const path = require('path');
const VueLoaderPlugin = require('vue-loader/lib/plugin'); //引入vue-loader库
module.exports = {
entry: './src/index.js', //配置启动的入口文件
devtool: 'cheap-module-eval-source-map',//不包含列信息,同时 loader 的 sourcemap 也被简化为只包含对应行的
module: {
rules: [
{ test: /\.vue$/, use: 'vue-loader' },//vue加载器
{
test: /\.tsx?$/, loader: 'ts-loader',//ts加载器
options: { transpileOnly: true, appendTsSuffixTo: [/.vue$/] } //认识vue文件
},
{ test: /\.css$/, loader: 'vue-style-loader!css-loader
' } //css加载器
]
},
output: {
filename: 'bundle.js',//输出的文件名称
path: path.resolve(__dirname, 'dist')//输出的目录名称
},
plugins: [
new VueLoaderPlugin() //vue-loader插件加载方式
],
devtool: '#eval-source-map'
};
名称:package.json
文件位置:/
主要修改内容:增加该编译,可以使用热加载的服务器,使用即时预览功能。
原位置:”scripts”: 段
替换/新增
"dev":"webpack-dev-server --open --mode development"
注意:–open参数是控制浏览器自动打开的,后面是可以添加参数“浏览器名称”,所以要注意其位置。
名称:index.html
文件位置:/
主要修改内容:只调用vue的主入口文件。
原位置:
替换/新增
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>webtsvuetitle>
head>
<body>
<div id="app">div>
<script src="/dist/bundle.js">script>
body>
html>
名称:App.vue
文件位置:/src
主要修改内容:用来呈现的具体内容
原位置:
替换/新增
<template>
<div id="app">
{{msg}}
div>
template>
<script>
export default{
name:'App',
data () {
return {
msg: 'Hello World'
}
}
}
script>
<style>
#app{
background-color:green;
}
style>
名称:index.js
文件位置:/src
主要修改内容:只负责调用一个VUE的模块
原位置:
替换/新增
import Vue from 'vue'
import App from './App.vue'
new Vue(
{
el:'#app',
render:h=>h(App)
}
)
webpack
npm run dev
名称:webpack.config.js
文件位置:/
主要修改内容:增加一个HtmlWebpackPlugin插件
原:plugins的位置进行修改
替换/新增
const HtmlWebpackPlugin = require('html-webpack-plugin') //文件头部增加
module.exports = {
module: {
plugins: [
new VueLoaderPlugin() //vue-loader插件加载方式
,new HtmlWebpackPlugin({ //此部分新增加
filename: 'index.html',//需要自动注入的文件名称
template: 'index.html',//需要自动注入的模板的文件名称
inject: true//是否自动注入生成后的文件
})
]
};
名称:index.html
文件位置:/
主要修改内容:删除调用js的内容
删除原文件的内容:
<script src="/dist/bundle.js">script>
有些改动需要重启,有些改变可以即时预览,再次运行之前 要先将现有的退出(主要是修改webpack.config.js时)
* 在VSCODE的终端上
Ctrl+C
npm run dev
名称:vue.shim.d.ts
文件位置:/src/
主要修改内容:
declare module '*.vue' {
import Vue from 'vue'
export default Vue
}
名称:index.js
文件位置:/src/
主要修改内容:修改文件名称为
index.ts
名称:webpack.config.js
文件位置:/
主要修改内容
原:
entry: './src/index.js', //配置启动的入口文件
替换/新增
entry: './src/index.ts', //配置启动的入口文件
npm run dev
名称:hello.vue
文件位置:/src/components/
主要修改内容:用来测试TS的模块
<template>
<div>
<div>欢迎您[<span class="visitor">{{marks}}span>]
来到Typescript的世界div>
<button @click="changed">换个人button>
div>
template>
<script lang="ts" src="./hello.ts">
script>
<style>
.visitor{
margin:1em;
color:blue;
font-size:15;
}
style>
创建一个ts的模块
名称:hello.ts
文件位置:/src/components/
主要修改内容:使用强类型来创建一个类,并进行简单测试
//typescript部分
//定义的类
class Test {
public names: Array<string> = ["小王", "小强", "小张"];
idx: number = 0;
GetVisitor(): string {
this.idx++;
if (this.idx == this.names.length) {
this.idx = 0;
}
return this.names[this.idx];
}
}
//VUE部分
import Vue from "vue";
//创建Test对象
let tester = new Test();
export default Vue.extend({
name: 'Hello',
data() {
return {
marks: tester.GetVisitor(),
}
},
methods:
{
changed() {
this.marks = tester.GetVisitor();
}
}
});
名称:app.vue
文件位置:/src
主要修改内容
原:
"app">
{{msg}}
...
name:'App',
替换/新增
<template>
<div id="app">
{{msg}}
<hello-component />
div>
template>
<script>
import HelloComponent from "./components/hello.vue"; //增
export default{
name:'App',
components:{HelloComponent}, //增
data () {
return {
msg: 'Hello World'
}
}
}
script>
npm run dev
名称:app.vue
文件位置:/src
主要修改内容
原:
<style>
#app{
background-color:green;
}
style>
修改为
<style lang="scss">
$back-color:green;
#app{
background-color:$back-color;
}
修改配置文件
名称:webpack.config.js
文件位置:/
主要修改内容:让vue正确处理scss
原:plugins的位置进行修改
替换/新增
module: {
rules: [ { test: /\.vue$/, use: 'vue-loader' },//vue加载器
{
test: /\.tsx?$/, loader: 'ts-loader',//ts加载器 options: { transpileOnly: true, appendTsSuffixTo: [/.vue$/] } //认识vue文件
},
{
test: /\.css$/, loader:'vue-style-loader!css-loader' }
]
},
修改为:
module: {
rules: [ { test: /\.vue$/, use: 'vue-loader' },//vue加载器
{
test: /\.tsx?$/, loader: 'ts-loader',//ts加载器 options: { transpileOnly: true, appendTsSuffixTo: [/.vue$/] } //认识vue文件
},
{
test: /\.css$/, loader:'vue-style-loader!css-loader' },
{
test:/\.scss$/, //增加,解析lang=scss的内容 loader:'vue-style-loader!css-loader!sass-loader' //这里不可以少,也折腾了好久,千万不要使用loader:'sass-loader'的形式 }
]
},
npm run dev
名称:app.vue
文件位置:/src
主要修改内容
原:
<style lang="scss">
$back-color:green;
#app{
background-color:$back-color;
}
style>
修改为
<style lang="scss" >
@import url('assets/style/public.scss');
style>
名称:public.scss
文件位置:/assets/style
添加内容:将从APP.VUE, 移出来的内容放到这里
$back-color:green;
#app{
background-color:$back-color;
}
好了再次运行
npm run dev
带有绿色背景的页面再次出现了,scss文件中可以使用scss带来的各种优点了
名称:webpack.config.js
文件位置:/
主要修改内容:增加一个extract-text-webpack-plugin插件
原:删除.css的处理部分
{ test: /\.css$/, loader: 'vue-style-loader!css-loader' } //css加载器
原:
{
test:/\.scss$/, //增加,解析lang=scss的内容
loader:'vue-style-loader!css-loader!sass-loader' //这里不可以少,也折腾了好久,千万不要使用loader:'sass-loader'的形式
},
替换/新增
const ExtractTextPlugin = require('extract-text-webpack-plugin') //文件头部增加
module.exports = {
module: {
rules: [
//以下内容是修改的
{
test: /(\.css$|\.scss$)/, //修改这里让.css和.scss都在这里处理
use: ExtractTextPlugin.extract({
fallback: 'style-loader',//使用style-loader
//resolve-url-loader may be chained before sass-loader if necessary
use: ['css-loader', 'sass-loader']//去掉vue-style-loader 不要让该插件来处理
})
}
//到尾部
],
plugins: [
new VueLoaderPlugin()
,new HtmlWebpackPlugin({
filename: 'index.html',//需要自动注入的文件名称
template: 'index.html',//需要自动注入的模板的文件名称
inject: true//是否自动注入生成后的文件
})
,new ExtractTextPlugin('style.css') //此部分新增加
]
};
webpack
此时查看/dist目录下多了一个style.css文件并查看其内容
#app {
color: green;
}
.visitor {
margin: 1em;
color: blue;
font-size: 15;
}
名称:app.vue
文件位置:/src
主要修改内容
原:
<style lang="scss" >
@import url('assets/style/public.scss');
style>
修改为
<style lang="scss" scoped> //是的,我们只是增加了一个scoped的声明
@import url('assets/style/public.scss');
style>
webpack
此时再一次打开/dist目录下的style.css文件并查看其内容,发现编译成功了,但是内容错了
$back-color:green;
#app{
background-color:$back-color;
}
.visitor {
margin: 1em;
color: blue;
font-size: 15;
}
名称:app.vue
文件位置:/src
主要修改内容
原:
<style lang="scss" scoped> //是的,我们只是增加了一个scoped的声明
@import url('assets/style/public.scss');
style>
修改为:
<style lang="scss" src="./assets/style/public.scss" scoped>
style>
改变了引用外部文件的形式
webpack
此时再一次打开/dist目录下的style.css文件并查看其内容,发现已经正确了
.visitor {
margin: 1em;
color: blue;
font-size: 15;
}
#app[data-v-7ba5bd90] {
background-color: green;
}
cnpm i -D typescript ts-loader webpack webpack-cli sass node-sass sass-loader webpack-dev-server html-webpack-plugin vue vue-loader vue-template-compiler css-loader style-loader vue-style-loader extract-text-webpack-plugin@4.0.0-beta.0