1、概要介绍

1.1 什么是 Vite

https://cn.vitejs.dev/
新型前端构建工具,主要由两部分组成:

  • 一个开发服务器,基于 原生 ES 模块 提供内建功能,如 模块热更新(HMR)。
  • 一套构建指令,使用 Rollup 打包代码,并且是预配置,可输出用于生产环境的高度优化过的静态资源。

1.2 对比其他构建工具的优势

WMR:主要是为 Preact 项目而设计,并为其提供了集成度更高的功能,比如预渲染。

@web/dev-serve:适用范围不是很广。它并未提供官方的框架集成,并且需要为生产构建手动设置 Rollup 配置。

与 @web/dev-server 相比,Vite 是一个更有主见、集成度更高的工具,旨在提供开箱即用的工作流。

Snowpack也是一个与 Vite 十分类似的非构建式原生 ESM 开发服务器。该项目已经不维护了。

2、基础应用

2.1 Vite 的优势

2.2 Vite 创建 Vue3 项目

➜  npm init vite
✔ Project name: … vite-vue3
✔ Select a framework: › vue
✔ Select a variant: › vue-tsDone. Now run:cd vite-vue3npm installnpm run dev

运行jsx

安装@vitejs/plugin-vue-jsx插件

yarn add @vitejs/plugin-vue-jsx -D

vite.config.ts文件配置引用

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
export default defineConfig({plugins: [vue(), vueJsx()]
})

编写App.jsx文件

import { defineComponent } from 'vue'
export default defineComponent({setup() {return () => {return <div>Hello Jsx</div>}},
})

main.ts文件配置引用

import { createApp } from 'vue'
// import App from './App.vue'
import App from './App'
createApp(App).mount('#app')

问题:TypeError: vite.createFilter is not a function

解决:npm install -D vite@^3

2.3 Vite 中使用 CSS 的各种功能

postcss

➜  yarn add @postcss-plugins/console -d
➜  touch postcss.config.js

在postcss.config.js中添加下面配置

module.exports = {plugins: [require('@postcss-plugins/console')]
}

测试文件index.css


:root {--main-bg-color: green;
}.root {@console.error hello root --main-bg-colorcolor: var(--main-bg-color);
}

别名

在vite.config.ts文件中配置

export default defineConfig({resolve: {alias: {'@styles': '/src/styles'}}
})

使用方式

// import './styles/index.css'
import '@styles/index.css'

css-modules

在test.module.css文件中编写

.moduleClass{color: yellow;
}

在App.jsx下使用

import classes from '@styles/test.module.css'
export default defineComponent({setup() {return () => {return <div class={`root ${classes.moduleClass}`}>Hello Jsx</div>}},
})

CSS pre-processors [sass,less,stylus]

yarn add less -D
touch /src/style/index.less

在index.less中编写

@bgColor: red;
.root {background-color: @bgColor;
}

在App.jsx下使用

import { defineComponent } from 'vue'
import '@styles/index.css'
import '@styles/index.less'
import classes from '@styles/test.module.css'
export default defineComponent({setup() {return () => {return <div class={`root ${classes.moduleClass}`}>Hello Jsx</div>}},
})

2.4 Vite 中使用 Typescript

tsc --noEmit

Vite 支持 Ts 语法, 但是只编译不校验
手动进行校验不输出 tsc --noEmit
编写测试文件test.ts

interface A {name: string
}
export const a: A = {name: 'jocker',age: 18
}

在 App.jsx 中使用

import { defineComponent } from 'vue'
import '@styles/index.css'
import '@styles/index.less'
import { a } from './test'
import classes from '@styles/test.module.css'
export default defineComponent({setup() {return () => {return <div class={`root ${classes.moduleClass}`}>Hello {{a.name}}</div>}},
})

在package.json修改配置

  "scripts": {"dev": "tsc --noEmit && vite","build": "vue-tsc --noEmit && tsc --noEmit && vite build","preview": "vite preview"},

isolatedModules

  • Exports of Non-Value Identifiers
  • Non-Module Files
  • References to const enum members

client types

  • Asset imports
  • Env 环境变量
  • HMR hot api

2.5 Vite 中处理静态资源的方法

图片资源

支持图片资源直接 import

import { defineComponent } from 'vue'
import '@styles/index.css'
import '@styles/index.less'
import { a } from './test'
import classes from '@styles/test.module.css'
import logo from './assets/logo.png'
export default defineComponent({setup() {return () => {console.log('name:', a.name)return (<><div class={`root  ${classes.moduleClass}`}>Hello {a.name}</div><img src={logo} alt="" /></>)}},
})

types

Vite 提供 import 参数以固定的方式引入文件

  • url: 把文件放在某个地方托管, 返回URL
  • raw: 直接返回文件的字符串内容
  • worker / worker inline: 返回 webworker
import test from './test?url' // 加上?url 返回资源路径
console.log(test) // => /src/test.tsimport test from './test?raw'
console.log(test) // => 将文件代码以字符串的形式打印
// import { A } from './types'
// import.meta.env
// export const a: A = {//   name: 'jocker123'
//   // age: 18,
// }

在worker.js中编写下面内容

var i = 0
function timedCount () {i= i + 1postMessage(i)setTimeout(timedCount, 500)
}
timedCount();

在App.jsx中使用

import Worker from './worker?worker'
const worker = new Worker()
worker.onmessage = function (e) {console.log(e) // 打印接收到的内容
}

JSON资源

在App.jsx中使用

import pkg from '../package.json' // 使用 JSON
console.log(pkg)// json 解构
import { version } from '../package.json'
console.log(version) // => 0.0.0

Web Assembly

在浏览器中可运行的二进制内容
https://www.assemblyscript.org/
在assemb.ts中编写下面内容

/** Calculates the n-th Fibonacci number. */
export function fib(n: i32): i32 {var a = 0,b = 1if (n > 0) {while (--n) {let t = a + ba = bb = t}return b}return a
}

编译成 wasm 文件

yarn add global assemblyscript
./node_modules/.bin/asc assemb.ts --outFile fib.wasm --optimize

在App.jsx中使用
https://vitejs.dev/guide/features.html#webassembly

import init from './fib.wasm?init'// init 异步方法 返回 promise
init().then((instance) => {console.log(instance.exports.fib(10))
})

2.6 Vite 集成 eslint 和 prettier

  • ESlint: 规范代码书写习惯
  • Prettier: 自动帮我们做格式化

配置 ESLint

创建 .eslintrc.js 配置文件

module.exports = {extends: 'standard',globals: {postMessage: true},rules: {"no-undef": "off"}
}

安装依赖

yarn add eslint eslint-config-standard eslint-plugin-import eslint-plugin-promise eslint-plugin-node -D
yarn add prettier -D

配置prettier

创建 .prettierrc 配置文件

{"semi": false,"singleQuote": true
}

在package.json增加校验命令

"lint": "eslint --ext js src/"

Git commit 前代码检查

yarn add husky -D
npx husky install
npx husky add .husky/pre-commit "npm run lint"

ESLint 常用配置

"no-alert": 0,//禁止使用alert confirm prompt
"no-array-constructor": 2,//禁止使用数组构造器
"no-bitwise": 0,//禁止使用按位运算符
"no-caller": 1,//禁止使用arguments.caller或arguments.callee
"no-catch-shadow": 2,//禁止catch子句参数与外部作用域变量同名
"no-class-assign": 2,//禁止给类赋值
"no-cond-assign": 2,//禁止在条件表达式中使用赋值语句
"no-console": 2,//禁止使用console
"no-const-assign": 2,//禁止修改const声明的变量
"no-constant-condition": 2,//禁止在条件中使用常量表达式 if(true) if(1)
"no-continue": 0,//禁止使用continue
"no-control-regex": 2,//禁止在正则表达式中使用控制字符
"no-debugger": 2,//禁止使用debugger
"no-delete-var": 2,//不能对var声明的变量使用delete操作符
"no-div-regex": 1,//不能使用看起来像除法的正则表达式/=foo/
"no-dupe-keys": 2,//在创建对象字面量时不允许键重复 {a:1,a:1}
"no-dupe-args": 2,//函数参数不能重复
"no-duplicate-case": 2,//switch中的case标签不能重复
"no-else-return": 2,//如果if语句里面有return,后面不能跟else语句
"no-empty": 2,//块语句中的内容不能为空
"no-empty-character-class": 2,//正则表达式中的[]内容不能为空
"no-empty-label": 2,//禁止使用空label
"no-eq-null": 2,//禁止对null使用==或!=运算符
"no-eval": 1,//禁止使用eval
"no-ex-assign": 2,//禁止给catch语句中的异常参数赋值
"no-extend-native": 2,//禁止扩展native对象
"no-extra-bind": 2,//禁止不必要的函数绑定
"no-extra-boolean-cast": 2,//禁止不必要的bool转换
"no-extra-parens": 2,//禁止非必要的括号
"no-extra-semi": 2,//禁止多余的冒号
"no-fallthrough": 1,//禁止switch穿透
"no-floating-decimal": 2,//禁止省略浮点数中的0 .5 3.
"no-func-assign": 2,//禁止重复的函数声明
"no-implicit-coercion": 1,//禁止隐式转换
"no-implied-eval": 2,//禁止使用隐式eval
"no-inline-comments": 0,//禁止行内备注
"no-inner-declarations": [2, "functions"],//禁止在块语句中使用声明(变量或函数)
"no-invalid-regexp": 2,//禁止无效的正则表达式
"no-invalid-this": 2,//禁止无效的this,只能用在构造器,类,对象字面量
"no-irregular-whitespace": 2,//不能有不规则的空格
"no-iterator": 2,//禁止使用__iterator__ 属性
"no-label-var": 2,//label名不能与var声明的变量名相同
"no-labels": 2,//禁止标签声明
"no-lone-blocks": 2,//禁止不必要的嵌套块
"no-lonely-if": 2,//禁止else语句内只有if语句
"no-loop-func": 1,//禁止在循环中使用函数(如果没有引用外部变量不形成闭包就可以)
"no-mixed-requires": [0, false],//声明时不能混用声明类型
"no-mixed-spaces-and-tabs": [2, false],//禁止混用tab和空格
"linebreak-style": [0, "windows"],//换行风格
"no-multi-spaces": 1,//不能用多余的空格
"no-multi-str": 2,//字符串不能用\换行
"no-multiple-empty-lines": [1, {"max": 2}],//空行最多不能超过2行
"no-native-reassign": 2,//不能重写native对象
"no-negated-in-lhs": 2,//in 操作符的左边不能有!
"no-nested-ternary": 0,//禁止使用嵌套的三目运算
"no-new": 1,//禁止在使用new构造一个实例后不赋值
"no-new-func": 1,//禁止使用new Function
"no-new-object": 2,//禁止使用new Object()
"no-new-require": 2,//禁止使用new require
"no-new-wrappers": 2,//禁止使用new创建包装实例,new String new Boolean new Number
"no-obj-calls": 2,//不能调用内置的全局对象,比如Math() JSON()
"no-octal": 2,//禁止使用八进制数字
"no-octal-escape": 2,//禁止使用八进制转义序列
"no-param-reassign": 2,//禁止给参数重新赋值
"no-path-concat": 0,//node中不能使用__dirname或__filename做路径拼接
"no-plusplus": 0,//禁止使用++,--
"no-process-env": 0,//禁止使用process.env
"no-process-exit": 0,//禁止使用process.exit()
"no-proto": 2,//禁止使用__proto__属性
"no-redeclare": 2,//禁止重复声明变量
"no-regex-spaces": 2,//禁止在正则表达式字面量中使用多个空格 /foo bar/
"no-restricted-modules": 0,//如果禁用了指定模块,使用就会报错
"no-return-assign": 1,//return 语句中不能有赋值表达式
"no-script-url": 0,//禁止使用javascript:void(0)
"no-self-compare": 2,//不能比较自身
"no-sequences": 0,//禁止使用逗号运算符
"no-shadow": 2,//外部作用域中的变量不能与它所包含的作用域中的变量或参数同名
"no-shadow-restricted-names": 2,//严格模式中规定的限制标识符不能作为声明时的变量名使用
"no-spaced-func": 2,//函数调用时 函数名与()之间不能有空格
"no-sparse-arrays": 2,//禁止稀疏数组, [1,,2]
"no-sync": 0,//nodejs 禁止同步方法
"no-ternary": 0,//禁止使用三目运算符
"no-trailing-spaces": 1,//一行结束后面不要有空格
"no-this-before-super": 0,//在调用super()之前不能使用this或super
"no-throw-literal": 2,//禁止抛出字面量错误 throw "error";
"no-undef": 1,//不能有未定义的变量
"no-undef-init": 2,//变量初始化时不能直接给它赋值为undefined
"no-undefined": 2,//不能使用undefined
"no-unexpected-multiline": 2,//避免多行表达式
"no-underscore-dangle": 1,//标识符不能以_开头或结尾
"no-unneeded-ternary": 2,//禁止不必要的嵌套 var isYes = answer === 1 ? true : false;
"no-unreachable": 2,//不能有无法执行的代码
"no-unused-expressions": 2,//禁止无用的表达式
"no-unused-vars": [2, {"vars": "all", "args": "after-used"}],//不能有声明后未被使用的变量或参数
"no-use-before-define": 2,//未定义前不能使用
"no-useless-call": 2,//禁止不必要的call和apply
"no-void": 2,//禁用void操作符
"no-var": 0,//禁用var,用let和const代替
"no-warning-comments": [1, { "terms": ["todo", "fixme", "xxx"], "location": "start" }],//不能有警告备注
"no-with": 2,//禁用with"array-bracket-spacing": [2, "never"],//是否允许非空数组里面有多余的空格
"arrow-parens": 0,//箭头函数用小括号括起来
"arrow-spacing": 0,//=>的前/后括号
"accessor-pairs": 0,//在对象中使用getter/setter
"block-scoped-var": 0,//块语句中使用var
"brace-style": [1, "1tbs"],//大括号风格
"callback-return": 1,//避免多次调用回调什么的
"camelcase": 2,//强制驼峰法命名
"comma-dangle": [2, "never"],//对象字面量项尾不能有逗号
"comma-spacing": 0,//逗号前后的空格
"comma-style": [2, "last"],//逗号风格,换行时在行首还是行尾
"complexity": [0, 11],//循环复杂度
"computed-property-spacing": [0, "never"],//是否允许计算后的键名什么的
"consistent-return": 0,//return 后面是否允许省略
"consistent-this": [2, "that"],//this别名
"constructor-super": 0,//非派生类不能调用super,派生类必须调用super
"curly": [2, "all"],//必须使用 if(){} 中的{}
"default-case": 2,//switch语句最后必须有default
"dot-location": 0,//对象访问符的位置,换行的时候在行首还是行尾
"dot-notation": [0, { "allowKeywords": true }],//避免不必要的方括号
"eol-last": 0,//文件以单一的换行符结束
"eqeqeq": 2,//必须使用全等
"func-names": 0,//函数表达式必须有名字
"func-style": [0, "declaration"],//函数风格,规定只能使用函数声明/函数表达式
"generator-star-spacing": 0,//生成器函数*的前后空格
"guard-for-in": 0,//for in循环要用if语句过滤
"handle-callback-err": 0,//nodejs 处理错误
"id-length": 0,//变量名长度
"indent": [2, 4],//缩进风格
"init-declarations": 0,//声明时必须赋初值
"key-spacing": [0, { "beforeColon": false, "afterColon": true }],//对象字面量中冒号的前后空格
"lines-around-comment": 0,//行前/行后备注
"max-depth": [0, 4],//嵌套块深度
"max-len": [0, 80, 4],//字符串最大长度
"max-nested-callbacks": [0, 2],//回调嵌套深度
"max-params": [0, 3],//函数最多只能有3个参数
"max-statements": [0, 10],//函数内最多有几个声明
"new-cap": 2,//函数名首行大写必须使用new方式调用,首行小写必须用不带new方式调用
"new-parens": 2,//new时必须加小括号
"newline-after-var": 2,//变量声明后是否需要空一行
"object-curly-spacing": [0, "never"],//大括号内是否允许不必要的空格
"object-shorthand": 0,//强制对象字面量缩写语法
"one-var": 1,//连续声明
"operator-assignment": [0, "always"],//赋值运算符 += -=什么的
"operator-linebreak": [2, "after"],//换行时运算符在行尾还是行首
"padded-blocks": 0,//块语句内行首行尾是否要空行
"prefer-const": 0,//首选const
"prefer-spread": 0,//首选展开运算
"prefer-reflect": 0,//首选Reflect的方法
"quotes": [1, "single"],//引号类型 `` "" ''
"quote-props":[2, "always"],//对象字面量中的属性名是否强制双引号
"radix": 2,//parseInt必须指定第二个参数
"id-match": 0,//命名检测
"require-yield": 0,//生成器函数必须有yield
"semi": [2, "always"],//语句强制分号结尾
"semi-spacing": [0, {"before": false, "after": true}],//分号前后空格
"sort-vars": 0,//变量声明时排序
"space-after-keywords": [0, "always"],//关键字后面是否要空一格
"space-before-blocks": [0, "always"],//不以新行开始的块{前面要不要有空格
"space-before-function-paren": [0, "always"],//函数定义时括号前面要不要有空格
"space-in-parens": [0, "never"],//小括号里面要不要有空格
"space-infix-ops": 0,//中缀操作符周围要不要有空格
"space-return-throw-case": 2,//return throw case后面要不要加空格
"space-unary-ops": [0, { "words": true, "nonwords": false }],//一元运算符的前/后要不要加空格
"spaced-comment": 0,//注释风格要不要有空格什么的
"strict": 2,//使用严格模式
"use-isnan": 2,//禁止比较时使用NaN,只能用isNaN()
"valid-jsdoc": 0,//jsdoc规则
"valid-typeof": 2,//必须使用合法的typeof的值
"vars-on-top": 2,//var必须放在作用域顶部
"wrap-iife": [2, "inside"],//立即执行函数表达式的小括号风格
"wrap-regex": 0,//正则表达式字面量用小括号包起来
"yoda": [2, "never"]//禁止尤达条件

2.7 Vite 中得 env 环境变量

在 Vite 中存在五个默认环境变量

  • MODE 模式 development local pro
  • BASE_URL
  • PROD
  • DEV
  • SSR

在main.ts中查看

import { createApp } from 'vue'
// import App from './App.vue'
import App from './App'
console.log(import.meta.env)
createApp(App).mount('#app')

自定义 ENV

创建 .env 配置文件

TITLE=HELLO // 不会生效
VITE_TITLE=HELLOVITE // 生效,变量前面必须加 VITE_

相同字段权重

 "dev": "vite --mode test" > .env.development.local >  .env.development >  .env

ENV智能提示

在默认情况下, Vite 为 import.meta.env提供类型定义, 但自定义的是没有的
在src目录下创建一个 env.d.ts 的文件 增加 ImportMetaEnv 的定义

interface ImportMetaEnv extends Readonly<Record<string, string>> {readonly VITE_TITLE: string// 更多环境变量...
}
interface ImportMeta {readonly env: ImportMetaEnv
}

3、Vite Config

// vim vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// 引入 jsx 依赖
import vueJsx from '@vitejs/plugin-vue-jsx'// https://vitejs.dev/config/
export default defineConfig({root: "", // index.html 存在的位置base: "./",// 指定请求资源路径(URL)的前缀, 默认 ./mode: "development", // 命令行启动时 --mode 同理, 指定 env, 默认 "development"(开发模式) "production" (生产模式)define: "", // ≈ rollup 的 definePlugin, 定义全局常量的替换方式plugins: [ // 使用插件vue(),vueJsx(),// 使用 vue-jsx],publicDir:"", //静态资源存放目录cacheDir: "", // 开发1时用到的缓存存放目录, 默认"node_modules/.vite"resolve: {alias: {},// 别名,路径映射: "@styles": "/src/styles"dedupe:[], // 如果存在相同依赖的副本, 比如安装了 vue2, vue3, 用该属性来制定最终使用哪一个依赖conditions: [], // 解决程序包中 情景导出 时的其他允许条件mainFields: [], // package.json 中,在解析包的入口点时尝试的字段列表。注意:这比从 exports 字段解析的情景导出优先级低:如果一个入口点从 exports 成功解析,resolve.mainFields 将被忽略。extensions: [], // 导入时想要省略的扩展名列表。不 建议忽略自定义导入类型的扩展名(例如:.vue),因为它会影响 IDE 和类型支持。 },css: {modules:[], // 配置 CSS modules 的行为postcss: "", // 内联的 PostCSS 配置(格式同 postcss.config.js)preprocessorOptions:{ //指定传递给 CSS 预处理器的选项scss: {additionalData: `$injectedColor: orange;`}}, },json: {namedExports:true, // 是否支持从 .json 文件中进行按名导入。// json 文件很大的时候建议开启~stringify: false,// 若设置为 true,导入的 JSON 会被转换为 export default JSON.parse("..."),这样会比转译成对象字面量性能更好,尤其是当 JSON 文件较大的时候。开启此项,则会禁用按名导入。},esbuild: {}, // ESbuild 转换选项assetsInclude: {assetsInclude: ['**/*.txt']}, // 指定额外的 picomatch 模式 作为静态资源处理,  比如我想 import 一个 txt 文件logLevel: 'info', // 打印日志级别clearScreen: true,envDir: "", //.env 文件存放目录build: {target: 'modules', // 设置最终构建的浏览器兼容目标polyfillModulePreload: true, //用于决定是否自动注入 module preload 的 polyfill.outDir: "dist",//指定输出路径assetsDir: "assets",// 静态资源存放的路径assetsInlineLimit: "4096", // 4kb, 小于此阈值的导入或引用资源将内联为 base64 编码,以避免额外的 http 请求。设置为 0 可以完全禁用此项。cssCodeSplit: true, // css 文件拆分sourcemap: 'hidden', // 构建后是否生成 source map 文件。rollupOptions:{},commonjsOptions:{},dynamicImportVarsOptions:{},lib:{},manifest: false, // 当设置为 true,构建后将会生成 manifest.json 文件 包含了没有被 hash 的资源文件名和 hash 后版本的映射。可以为一些服务器框架渲染时提供正确的资源引入链接。ssrManifest: false,minify: 'esbuild',terserOptions: {},write: true, //设置为 false 来禁用将构建后的文件写入磁盘。这常用于 编程式地调用 build() 在写入磁盘之前,需要对构建后的文件进行进一步处理。emptyOutDir: true, // 构建时是否先清空 distbrotliSize: true, // 构建后压缩报告chunkSizeWarningLimit: 500,// 压缩超过 500k 提醒watch: null, //设置为 {} 则会启用 rollup 的监听器。在涉及只用在构建时的插件时和集成开发流程中很常用。// 依赖优化项optimizeDeps: {entries: "",include: [],exclude: [],keepNames: false, //  true 重命名符号避免冲突}}
})

【JEECG】Vue3-02Vite详细使用教程相关推荐

  1. vue2+vue3小白零基础教程—vue2篇,全网2021最详细教程

    vue教程 提示:Vue3系列请参考Vue2+Vue3小白零基础教程-vue3篇文章,本文为vue2篇. 1. Vue核心 1.1 Vue简介 1.1.1 Vue是什么 一套用于构建用户界面的渐进式J ...

  2. YDOOK: vue3.0: vue-cli4.5: stup()与 各类钩子函数详细使用教程

    YDOOK: vue3.0: vue-cli4.5: stup()与 各类钩子函数详细使用教程 1. vue3.0 钩子函数与 vue2.0 钩子函数的区别与对比: vue3.0 钩子函数在 vue2 ...

  3. TypeScript超详细入门教程(上)

    TypeScript超详细入门教程(上) 01 开篇词:Hello~TypeScript 01 开篇词:Hello~TypeScript 更新时间:2019-10-30 13:49:46 既然我已经踏 ...

  4. mysql为什么每天0点就装东西_MySQL的详细安装教程

    1.安装之前需要注意的几点 建议不要安装最新版本,一般找mysql5.0系列版本即可: mysq1官网有.zip和.msi两种安装形式: zip是压缩包,直接解压缩以后使用的,需要自己配置各种东西:m ...

  5. mysql windows 管道连接,科技常识:Windows Server 2016 MySQL数据库安装配置详细安装教程...

    今天小编跟大家讲解下有关Windows Server 2016 MySQL数据库安装配置详细安装教程 ,相信小伙伴们对这个话题应该也很关注吧,小编也收集到了有关Windows Server 2016 ...

  6. python安装了运行不了_python详细安装教程

    本章开始,我们将详细介绍Python编程环境的搭建,工欲善其事必先利其器,所以我们这里先介绍python详细安装教程.由于Python是跨平台的,他可以运行在Windows.Linux.Mac等系统上 ...

  7. truffle详细使用教程

    详细使用教程 选择以太坊客户端 编译智能合约 运行迁移 测试智能合约 用 JavaScript 编写测试脚本 编写 Solidity 测试脚本 与智能合约交互 使用 EthPM 包管理工具 调试智能合 ...

  8. Apache的详细安装教程和遇到的问题解决方案

    Apache的详细安装教程和遇到的问题解决方案 参考文章: (1)Apache的详细安装教程和遇到的问题解决方案 (2)https://www.cnblogs.com/jave1ove/p/54864 ...

  9. centos7 查看ip_VMware安装CentOS 7操作系统详细操作教程(网络配置)

    网络配置,输入vi /etc/sysconfig/network-scripts/,按下Tab键,根据提示,输入ifcfg-eno16777736,按下Enter键,如下图所示: 图 1 网络配置-1 ...

最新文章

  1. mysql function使用
  2. php中静态方法的调用,php中静态方法和非静态方法如何相互调用?
  3. java 图形处理库_java中处理图片的类库
  4. 漫步最优化三十——非精确线搜索
  5. 微信授权 php josn,php怎么获取微信多客服json数据
  6. 浅谈http协议六种请求方法,get、head、put、delete、post、options区别
  7. mes系统服务器内存,mes系统做服务器还是客户端
  8. dateutil 日期计算_DateUtil日期工具类
  9. java生成随机数的函数_java生成随机数的常用方法分析
  10. w10安装ubuntu_记 Win10 + Ubuntu 双系统安装
  11. 自然语言处理(七)——n元语法模型计算句子出现概率
  12. 右下角弹窗代码_vueamap使用步骤和代码示例
  13. 笔记本电脑已连接WIFI密码查看方法
  14. 南京大学本科、斯坦福博士、化学奥赛金牌得主 王庆根 人生反思
  15. Direct2D入门
  16. SQLite简介,C#调用SQLite
  17. 轻型载货汽车后悬架钢板弹簧设计
  18. Java 2022圣诞树+2023元旦倒计时打包一起领走
  19. Android 自动开关机
  20. vivado中symthsis(综合)和implementation(执行)具体是为了完成什么操作?

热门文章

  1. php 压缩视频大小,视频压缩软件如何压缩视频文件大小
  2. 用lua生成modbus协议中的ascii模式的1363格式(适合爱默生公司的ups或者空调之类的协议命令)
  3. 农业银行网站接口php,农行支付接口api
  4. python格式化字符串
  5. c语言表达式1 4 2.75,东师C程序设计20秋在线作业1 2【标准答案】
  6. 学以致用深入浅出数字信号处理 pdf_Robei |《数字集成电路设计》正式出版啦
  7. 从第一到陪跑,光明乳业半只脚已经伸到了悬崖外
  8. 2920集五福_2019集五福刮刮卡支付宝积分翻倍规则
  9. 今天睡眠质量记录75分
  10. xml,json,html格式化工具