Vue 新版腳手架工具,300 行代碼輕盈新生!

2021-12-30 網際網路大廠面試

作者:常以「若川」為名混跡於江湖。歡迎加我(若川)微信ruochuan12。前端路上 | 所知甚少,唯善學。

1. 前言

想學源碼,極力推薦之前我(若川)寫的《學習源碼整體架構系列》 包含jQuery、underscore、lodash、vuex、sentry、axios、redux、koa、vue-devtools、vuex4、koa-compose、vue-next-release、vue-this等十餘篇源碼文章。

長按識別二維碼查看原文

https://juejin.cn/column/6960551178908205093

美國時間 2021 年 10 月 7 日早晨,Vue 團隊等主要貢獻者舉辦了一個 Vue Contributor Days 在線會議,蔣豪群(知乎胖茶,Vue.js 官方團隊成員,Vue-CLI 核心開發),在會上公開了create-vue,一個全新的腳手架工具。

長按識別二維碼查看原文

https://github.com/sodatea

長按識別二維碼查看原文

https://www.zhihu.com/people/sodatea

長按識別二維碼查看原文

https://github.com/vuejs/create-vue

create-vue使用npm init vue@next一行命令,就能快如閃電般初始化好基於vite的Vue3項目。

本文就是通過調試和大家一起學習這個300餘行的源碼。

閱讀本文,你將學到:

1. 學會全新的官方腳手架工具 create-vue 的使用和原理
2. 學會使用 VSCode 直接打開 github 項目
3. 學會使用測試用例調試源碼
4. 學以致用,為公司初始化項目寫腳手架工具。
5. 等等

2. 使用 npm init vue@next 初始化 vue3 項目

create-vue github README上寫著,An easy way to start a Vue project。一種簡單的初始化vue項目的方式。

長按識別二維碼查看原文

https://github.com/vuejs/create-vue

npm init vue@next

估計大多數讀者,第一反應是「這樣竟然也可以,這麼簡單快捷?」

忍不住想動手在控制臺輸出命令,我在終端試過,見下圖。

npm-init-vue@next

最終cd vue3-project、npm install 、npm run dev打開頁面http://localhost:3000。

長按識別二維碼查看原文

http://localhost:3000/初始化頁面2.1 npm init && npx

為啥 npm init 也可以直接初始化一個項目,帶著疑問,我們翻看 npm 文檔。

npm init

長按識別二維碼查看原文

https://docs.npmjs.com/cli/v6/commands/npm-init

npm init 用法:

npm init [--force|-f|--yes|-y|--scope]
npm init <@scope> (same as `npx <@scope>/create`)
npm init [<@scope>/]<name> (same as `npx [<@scope>/]create-<name>`)

npm init <initializer> 時轉換成npx命令:

npm init foo -> npx create-foo

npm init @usr/foo -> npx @usr/create-foo

npm init @usr -> npx @usr/create

看完文檔,我們也就理解了:

# 運行
npm init vue@next
# 相當於
npx create-vue@next

我們可以在這裡create-vue,找到一些信息。或者在npm create-vue找到版本等信息。

長按識別二維碼查看原文

https://registry.npmjs.org/create-vue

長按識別二維碼查看原文

https://www.npmjs.com/package/create-vue

其中@next是指定版本,通過npm dist-tag ls create-vue命令可以看出,next版本目前對應的是3.0.0-beta.6。

npm dist-tag ls create-vue
- latest: 3.0.0-beta.6
- next: 3.0.0-beta.6

發布時 npm publish --tag next 這種寫法指定 tag。默認標籤是latest。

可能有讀者對 npx 不熟悉,這時找到阮一峰老師博客 npx 介紹、nodejs.cn npx

長按識別二維碼查看原文

http://www.ruanyifeng.com/blog/2019/02/npx.html

長按識別二維碼查看原文

http://nodejs.cn/learn/the-npx-nodejs-package-runner

npx 是一個非常強大的命令,從 npm 的 5.2 版本(發布於 2017 年 7 月)開始可用。

簡單說下容易忽略且常用的場景,npx有點類似小程序提出的隨用隨走。

「輕鬆地運行本地命令」

node_modules/.bin/vite -v
# vite/2.6.5 linux-x64 node-v14.16.0

# 等同於
# package.json script: "vite -v"
# npm run vite

npx vite -v
# vite/2.6.5 linux-x64 node-v14.16.0

「使用不同的 Node.js 版本運行代碼」 某些場景下可以臨時切換 node 版本,有時比 nvm 包管理方便些。

npx node@14 -v
# v14.18.0

npx -p node@14 node -v
# v14.18.0

「無需安裝的命令執行」

# 啟動本地靜態服務
npx http-server

# 無需全局安裝
npx @vue/cli create vue-project
# @vue/cli 相比 npm init vue@next npx create-vue@next 很慢。

# 全局安裝
npm i -g @vue/cli
vue create vue-project

npx-vue-cli

npm init vue@next (npx create-vue@next) 快的原因,主要在於依賴少(能不依賴包就不依賴),源碼行數少,目前index.js只有300餘行。

3. 配置環境調試源碼3.1 克隆 create-vue 項目

本文倉庫地址 create-vue-analysis,求個star~

長按識別二維碼查看原文

https://github.com/lxchuan12/create-vue-analysis.git

# 可以直接克隆我的倉庫,我的倉庫保留的 create-vue 倉庫的 git 記錄
git clone https://github.com/lxchuan12/create-vue-analysis.git
cd create-vue-analysis/create-vue
npm i

當然不克隆也可以直接用 VSCode 打開我的倉庫

長按識別二維碼查看原文

https://open.vscode.dev/lxchuan12/create-vue-analysis

順帶說下:我是怎麼保留 create-vue 倉庫的 git 記錄的。

# 在 github 上新建一個倉庫 `create-vue-analysis` 克隆下來
git clone https://github.com/lxchuan12/create-vue-analysis.git
cd create-vue-analysis
git subtree add --prefix=create-vue https://github.com/vuejs/create-vue.git main
# 這樣就把 create-vue 文件夾克隆到自己的 git 倉庫了。且保留的 git 記錄

關於更多 git subtree,可以看Git Subtree 簡明使用手冊

長按識別二維碼查看原文

https://segmentfault.com/a/11900000039690603.2 package.json 分析

// create-vue/package.json
{
"name": "create-vue",
"version": "3.0.0-beta.6",
"description": "An easy way to start a Vue project",
"type": "module",
"bin": {
"create-vue": "outfile.cjs"
},
}

bin指定可執行腳本。也就是我們可以使用 npx create-vue 的原因。

outfile.cjs 是打包輸出的JS文件

{
"scripts": {
"build": "esbuild --bundle index.js --format=cjs --platform=node --outfile=outfile.cjs",
"snapshot": "node snapshot.js",
"pretest": "run-s build snapshot",
"test": "node test.js"
},
}

執行 npm run test 時,會先執行鉤子函數 pretest。run-s 是 npm-run-all 提供的命令。run-s build snapshot 命令相當於 npm run build && npm run snapshot。

長按識別二維碼查看原文

https://github.com/mysticatea/npm-run-all/blob/HEAD/docs/run-s.md

根據腳本提示,我們來看 snapshot.js 文件。

3.3 生成快照 snapshot.js

這個文件主要作用是根據const featureFlags = ['typescript', 'jsx', 'router', 'vuex', 'with-tests'] 組合生成31種加上 default 共計 32種 組合,生成快照在 playground目錄。

因為打包生成的 outfile.cjs 代碼有做一些處理,不方便調試,我們可以修改為index.js便於調試。

// 路徑 create-vue/snapshot.js
const bin = path.resolve(__dirname, './outfile.cjs')
// 改成 index.js 便於調試
const bin = path.resolve(__dirname, './index.js')

我們可以在for和 createProjectWithFeatureFlags 打上斷點。

createProjectWithFeatureFlags其實類似在終端輸入如下執行這樣的命令

node ./index.js --xxx --xxx --force

function createProjectWithFeatureFlags(flags) {
const projectName = flags.join('-')
console.log(`Creating project ${projectName}`)
const { status } = spawnSync(
'node',
[bin, projectName, ...flags.map((flag) => `--${flag}`), '--force'],
{
cwd: playgroundDir,
stdio: ['pipe', 'pipe', 'inherit']
}
)

if (status !== 0) {
process.exit(status)
}
}

// 路徑 create-vue/snapshot.js
for (const flags of flagCombinations) {
createProjectWithFeatureFlags(flags)
}

「調試」:VSCode打開項目,VSCode高版本(1.50+)可以在 create-vue/package.json => scripts => "test": "node test.js"。滑鼠懸停在test上會有調試腳本提示,選擇調試腳本。如果對調試不熟悉,可以看我之前的文章koa-compose,寫的很詳細。

長按識別二維碼查看原文

https://lxchuan12.gitee.io/koa-compose

調試時,大概率你會遇到:create-vue/index.js 文件中,__dirname 報錯問題。可以按照如下方法解決。在 import 的語句後,添加如下語句,就能愉快的調試了。

// 路徑 create-vue/index.js
// 解決辦法和nodejs issues
// https://stackoverflow.com/questions/64383909/dirname-is-not-defined-in-node-14-version
// https://github.com/nodejs/help/issues/2907

import { fileURLToPath } from 'url';
import { dirname } from 'path';

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

接著我們調試 index.js 文件,來學習。

4. 調試 index.js 主流程

回顧下上文 npm init vue@next 初始化項目的。

npm-init-vue@next

單從初始化項目輸出圖來看。主要是三個步驟。

1. 輸入項目名稱,默認值是 vue-project
2. 詢問一些配置 渲染模板等
3. 完成創建項目,輸出運行提示

async function init() {
// 省略放在後文詳細講述
}

// async 函數返回的是Promise 可以用 catch 報錯
init().catch((e) => {
console.error(e)
})

4.1 解析命令行參數

// 返回運行當前腳本的工作目錄的路徑。
const cwd = process.cwd()
// possible options:
// --default
// --typescript / --ts
// --jsx
// --router / --vue-router
// --vuex
// --with-tests / --tests / --cypress
// --force (for force overwriting)
const argv = minimist(process.argv.slice(2), {
alias: {
typescript: ['ts'],
'with-tests': ['tests', 'cypress'],
router: ['vue-router']
},
// all arguments are treated as booleans
boolean: true
})

minimist

長按識別二維碼查看原文

https://github.com/substack/minimist

簡單說,這個庫,就是解析命令行參數的。看例子,我們比較容易看懂傳參和解析結果。

$ node example/parse.js -a beep -b boop
{ _: [], a: 'beep', b: 'boop' }

$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz
{ _: [ 'foo', 'bar', 'baz' ],
x: 3,
y: 4,
n: 5,
a: true,
b: true,
c: true,
beep: 'boop' }

比如

npm init vue@next --vuex --force

4.2 如果設置了 feature flags 跳過 prompts 詢問

這種寫法方便代碼測試等。直接跳過交互式詢問,同時也可以省時間。

// if any of the feature flags is set, we would skip the feature prompts
// use `??` instead of `||` once we drop Node.js 12 support
const isFeatureFlagsUsed =
typeof (argv.default || argv.ts || argv.jsx || argv.router || argv.vuex || argv.tests) ===
'boolean'

// 生成目錄
let targetDir = argv._[0]
// 默認 vue-projects
const defaultProjectName = !targetDir ? 'vue-project' : targetDir
// 強制重寫文件夾,當同名文件夾存在時
const forceOverwrite = argv.force

4.3 交互式詢問一些配置

如上文npm init vue@next 初始化的圖示

let result = {}

try {
// Prompts:
// - Project name:
// - whether to overwrite the existing directory or not?
// - enter a valid package name for package.json
// - Project language: JavaScript / TypeScript
// - Add JSX Support?
// - Install Vue Router for SPA development?
// - Install Vuex for state management? (TODO)
// - Add Cypress for testing?
result = await prompts(
[
{
name: 'projectName',
type: targetDir ? null : 'text',
message: 'Project name:',
initial: defaultProjectName,
onState: (state) => (targetDir = String(state.value).trim() || defaultProjectName)
},
// 省略若干配置
{
name: 'needsTests',
type: () => (isFeatureFlagsUsed ? null : 'toggle'),
message: 'Add Cypress for testing?',
initial: false,
active: 'Yes',
inactive: 'No'
}
],
{
onCancel: () => {
throw new Error(red('✖') + ' Operation cancelled')
}
}
]
)
} catch (cancelled) {
console.log(cancelled.message)
// 退出當前進程。
process.exit(1)
}

4.4 初始化詢問用戶給到的參數,同時也會給到默認值

// `initial` won't take effect if the prompt type is null
// so we still have to assign the default values here
const {
packageName = toValidPackageName(defaultProjectName),
shouldOverwrite,
needsJsx = argv.jsx,
needsTypeScript = argv.typescript,
needsRouter = argv.router,
needsVuex = argv.vuex,
needsTests = argv.tests
} = result
const root = path.join(cwd, targetDir)

// 如果需要強制重寫,清空文件夾

if (shouldOverwrite) {
emptyDir(root)
// 如果不存在文件夾,則創建
} else if (!fs.existsSync(root)) {
fs.mkdirSync(root)
}

// 腳手架項目目錄
console.log(`\nScaffolding project in ${root}...`)

// 生成 package.json 文件
const pkg = { name: packageName, version: '0.0.0' }
fs.writeFileSync(path.resolve(root, 'package.json'), JSON.stringify(pkg, null, 2))

4.5 根據模板文件生成初始化項目所需文件

// todo:
// work around the esbuild issue that `import.meta.url` cannot be correctly transpiled
// when bundling for node and the format is cjs
// const templateRoot = new URL('./template', import.meta.url).pathname
const templateRoot = path.resolve(__dirname, 'template')
const render = function render(templateName) {
const templateDir = path.resolve(templateRoot, templateName)
renderTemplate(templateDir, root)
}

// Render base template
render('base')

// 添加配置
// Add configs.
if (needsJsx) {
render('config/jsx')
}
if (needsRouter) {
render('config/router')
}
if (needsVuex) {
render('config/vuex')
}
if (needsTests) {
render('config/cypress')
}
if (needsTypeScript) {
render('config/typescript')
}

4.6 渲染生成代碼模板

// Render code template.
// prettier-ignore
const codeTemplate =
(needsTypeScript ? 'typescript-' : '') +
(needsRouter ? 'router' : 'default')
render(`code/${codeTemplate}`)

// Render entry file (main.js/ts).
if (needsVuex && needsRouter) {
render('entry/vuex-and-router')
} else if (needsVuex) {
render('entry/vuex')
} else if (needsRouter) {
render('entry/router')
} else {
render('entry/default')
}

4.7 如果配置了需要 ts

重命名所有的 .js 文件改成 .ts。重命名 jsconfig.json 文件為 tsconfig.json 文件。

jsconfig.json 是VSCode的配置文件,可用於配置跳轉等。

長按識別二維碼查看原文

https://code.visualstudio.com/docs/languages/jsconfig

把index.html 文件裡的 main.js 重命名為 main.ts。

// Cleanup.

if (needsTypeScript) {
// rename all `.js` files to `.ts`
// rename jsconfig.json to tsconfig.json
preOrderDirectoryTraverse(
root,
() => {},
(filepath) => {
if (filepath.endsWith('.js')) {
fs.renameSync(filepath, filepath.replace(/\.js$/, '.ts'))
} else if (path.basename(filepath) === 'jsconfig.json') {
fs.renameSync(filepath, filepath.replace(/jsconfig\.json$/, 'tsconfig.json'))
}
}
)

// Rename entry in `index.html`
const indexHtmlPath = path.resolve(root, 'index.html')
const indexHtmlContent = fs.readFileSync(indexHtmlPath, 'utf8')
fs.writeFileSync(indexHtmlPath, indexHtmlContent.replace('src/main.js', 'src/main.ts'))
}

4.8 配置了不需要測試

因為所有的模板都有測試文件,所以不需要測試時,執行刪除 cypress、/__tests__/ 文件夾

if (!needsTests) {
// All templates assumes the need of tests.
// If the user doesn't need it:
// rm -rf cypress **/__tests__/
preOrderDirectoryTraverse(
root,
(dirpath) => {
const dirname = path.basename(dirpath)

if (dirname === 'cypress' || dirname === '__tests__') {
emptyDir(dirpath)
fs.rmdirSync(dirpath)
}
},
() => {}
)
}

4.9 根據使用的 npm / yarn / pnpm 生成README.md 文件,給出運行項目的提示

// Instructions:
// Supported package managers: pnpm > yarn > npm
// Note: until <https://github.com/pnpm/pnpm/issues/3505> is resolved,
// it is not possible to tell if the command is called by `pnpm init`.
const packageManager = /pnpm/.test(process.env.npm_execpath)
? 'pnpm'
: /yarn/.test(process.env.npm_execpath)
? 'yarn'
: 'npm'

// README generation
fs.writeFileSync(
path.resolve(root, 'README.md'),
generateReadme({
projectName: result.projectName || defaultProjectName,
packageManager,
needsTypeScript,
needsTests
})
)

console.log(`\nDone. Now run:\n`)
if (root !== cwd) {
console.log(` ${bold(green(`cd ${path.relative(cwd, root)}`))}`)
}
console.log(` ${bold(green(getCommand(packageManager, 'install')))}`)
console.log(` ${bold(green(getCommand(packageManager, 'dev')))}`)
console.log()

5. npm run test => node test.js 測試

// create-vue/test.js
import fs from 'fs'
import path from 'path'
import { fileURLToPath } from 'url'

import { spawnSync } from 'child_process'

const __dirname = path.dirname(fileURLToPath(import.meta.url))
const playgroundDir = path.resolve(__dirname, './playground/')

for (const projectName of fs.readdirSync(playgroundDir)) {
if (projectName.endsWith('with-tests')) {
console.log(`Running unit tests in ${projectName}`)
const unitTestResult = spawnSync('pnpm', ['test:unit:ci'], {
cwd: path.resolve(playgroundDir, projectName),
stdio: 'inherit',
shell: true
})
if (unitTestResult.status !== 0) {
throw new Error(`Unit tests failed in ${projectName}`)
}

console.log(`Running e2e tests in ${projectName}`)
const e2eTestResult = spawnSync('pnpm', ['test:e2e:ci'], {
cwd: path.resolve(playgroundDir, projectName),
stdio: 'inherit',
shell: true
})
if (e2eTestResult.status !== 0) {
throw new Error(`E2E tests failed in ${projectName}`)
}
}
}

主要對生成快照時生成的在 playground 32個文件夾,進行如下測試。

pnpm test:unit:ci

pnpm test:e2e:ci

6. 總結

我們使用了快如閃電般的npm init vue@next,學習npx命令了。學會了其原理。

npm init vue@next => npx create-vue@next

快如閃電的原因在於依賴的很少。很多都是自己來實現。如:Vue-CLI中 vue create vue-project 命令是用官方的npm包validate-npm-package-name,刪除文件夾一般都是使用 rimraf。而 create-vue 是自己實現emptyDir和isValidPackageName。

長按識別二維碼查看原文

https://github.com/npm/validate-npm-package-name

長按識別二維碼查看原文

https://github.com/isaacs/rimraf

非常建議讀者朋友按照文中方法使用VSCode調試 create-vue 源碼。源碼中還有很多細節文中由於篇幅有限,未全面展開講述。

學完本文,可以為自己或者公司創建類似初始化腳手架。

---

歡迎掃碼添加山月的微信,備註進群,加入山月的前端面試交流群。

相關焦點

  • 「乾貨」VUE腳手架使用教程
    ,VUE的腳手架在英文中叫做(VUE-CLI)要記得哈,不然面試就去了喲,好的,接下來我們就來了解下VUE腳手架的使用吧,在這之前我們需要先安裝一些軟體才可以喲,HBuilder已經陣亡了,不能搭建VUE腳手架這個框架了...
  • Vue CLI 3.0 正式發布,Vue.js 開發標準化工具
    無需 Eject 即可配置上面列出的所有功能都可以零配置:當通過 Vue CLI 3 構建項目時,它會安裝 Vue CLI 運行時服務(@ vue / cli-service),選擇功能插件,並生成必要的配置文件。在多數情況下,你只需要專注於編寫代碼。
  • Vue進階篇: vue-loader
    Webpack 是一個模塊打包工具,也被稱為模塊加載器。它將一堆文件中的每個文件都作為一個模塊,並找出它們的依賴關係,最終將它們打包為可部署的靜態資源。比如:一些不能直接在瀏覽器中運行的模塊,我們就可以通過webpack把它打包成一個文件,這樣就可以通過 <script> 標籤加載。
  • Vue 3全新的Web開發構建工具——Vite介紹
    Vite是Vue的作者尤雨溪開發的Web開發構建工具,它是一個基於瀏覽器原生ES模塊導入的開發伺服器,在開發環境下,利用瀏覽器去解析import,在伺服器端按需編譯返回,完全跳過了打包這個概念,伺服器隨啟隨用。
  • 「連載一」「大綱」前端框架 Vue 入門教程
    介紹本教程是基於 @vue/cli( v3) & webpack(v4) & vuex(v3) & vue-router(v3) ,且按照官方文檔,遵循目前生產項目的常用實踐,來講解如何一步一步的學習 Vue ,並搭建 Vue 應用腳手架。
  • 用這 6 個技巧快速優化我們的 Vue 代碼
    今天其實就是說下我自己在vue項目中進行的一些總結或者是經驗,如果有錯誤的地方也是歡迎大家指正。1.兼容IE11用過vue的同學們應該都比較清楚,vue其實是可以兼容ie9的,但是這種兼容並不是說,你寫了一個項目,打開ie9就能兼容了,是需要用工具將代碼進行轉換的。
  • 深入認識 vue-cli:能做的不僅僅是初始化 vue 工程
    相信對於大部分使用過VueJS的同學來說, vue-cli是他們非常熟悉的一個工具。
  • 如何打造屬於自己的CLI工具
    前端開發中,經常會用到一些 CLI 工具, ts-node 轉換ts文件, babel-cli 來解析ES6+語法,還有初始化SPA項目的腳手架, create-react-app 、 vue-cli 、 vite 等等,這些cli工具通過自動化腳本節約了開發者在配置 webpack , tsconfig , babel 上面的時間,實現了快捷開發。
  • 30秒創建腳手架的腳手架
    前端很多 cli 工具,比如著名的 vue-cli,這些工具大多數都是作用於快速創建對應框架的模版代碼,讓開發者可以不用從0開始配置項目,可以專注於項目本身的業務邏輯開發,從而快速創建項目。然而,這樣的步驟走下來,雖然形成了一個 cli 工具,但是創建 cli 項目本身的過程,還是挺繁瑣的。
  • 揭密vue.js的神秘之處,小程序跟vue有什麼關係
    微容用的微信小程序平臺採用開發思路是前後端分離,前端採用vue.js+h5+jq開發,後端採用MVE的思路,用php開發,用vue.js構建來微信小程序可視化前端之後,微容給大家介紹下vue的來源和特徵。
  • vue是什麼?為什麼這麼火?
    在一個html文件中,我們可以通過script標籤引入Vue.js,然後就可以寫代碼了。關於更多的vue指令,可以參考官方中文文檔。vue指令中文文檔Vue.js技術棧以上我們講到可以直接在一個html頁面裡通過引入Vue.js來直接寫Vue代碼,但是這樣的方式並不常用。
  • 教你用 Node 創建 CLI 工具
    ;複製代碼命令行執行npm link,相當於把這個包連接到全局。如果 npm link 報錯,windows/mac 嘗試使用管理員身份輸入。在命令行執行wbiao2. 搭建命令行界面識別命令行 - commandercommand 後面可跟一個 name,用空格隔開。
  • 手摸手Electron + Vue實戰教程(一)
    一個由淺入深(或者說從入門到放棄)的套路,一步步帶你敲代碼實現一個小項目,希望能給大家帶來一點點啟發。2 項目搭建網上有個比較火的腳手架electron-vue,github 上 12.2k 的 star,大家應該都聽說過或者使用過,但現在我們不使用它,electron-vue是vue-cli2.0的版本,現在都已經出道 4.0 了,再者electron-vue已經很久沒有更新,我們可以使用 vue 最新的腳手架加上插件vue-cli-plugin-electron-builder
  • VUE初體驗篇-安裝
    vue作為三大前端框架之一,其中平緩的學習曲線,讓好多前端新手非常喜歡,應用也越來越廣泛。雖然其他兩個框架有facebook,和google撐腰,但是vue已然是不可小覷的對手了。無論你去做前端面試還是公司新項目技術選型,vue一定不會跑出你們的備選名單。下面簡單講講做vue開發第一部,安裝!
  • vue-cli安裝步驟詳解
    腳手架是指通過輸入簡單指令幫助你快速搭建好一個基本環境的工具。經過一番焦急的等待,我終於等到安裝好的這一刻了,可以看到element-ui-test目錄下已經新建好了一個demo文件夾了,裡面就是我們安裝的目錄結構了。還是使用cnpm 安裝 npm 運行,下載的適合就用國內淘寶的鏡像會比較快速,也不會下載中斷或出錯。
  • Vue2.0父子組件間通信
    只需幾分鐘,就可以建立並運行一個帶有「熱重載、保存時代碼檢查以及可直接用於生產環境的構建配置」的項目。首先必須先安裝node.js,Node.js 在 0.6.3 版本開始內建npm,所以安裝好node.js後,npm也就裝好。
  • 推薦一款腳手架工具plop,利用模板批量生成代碼,省時省力
    今天這篇文章給大家詳解一個微型的腳手架工具——plop,它的特點是可以根據一個模板文件批量的生成文本或者代碼,不再需要手動複製粘貼,省事省力。看著這個命令行界面是不是很熟悉,對,沒錯,plop內部就是封裝了inquirer模塊,此模塊的prompt都可以應用在plop中。圖1中我們把代碼模板放在了template欄位中,但是當模板代碼較多時,這樣做就不方便了。這時咱們可以把代碼模板放在一個文件中,使用templateFile欄位對應一個模板文件路徑,效果也是一樣的,如下,
  • 使用Vue CLI腳手架搭建Vue基礎環境
    文件下,打開命令行運行程序2.Vue常用基礎配置配置環境變量前端的環境變量跟正常系統裡的環境變量差不多,都是讓當前系統中能簡易的獲取到對應的信息(文件路徑、文件名稱等)環境變量配置規則在項目根目錄(本文根目錄vueproject)下,新建環境變量配置文件文件名規則.env
  • Electron+Vue開發跨平臺桌面應用
    環境搭建創建Electron跨平臺應用之前,需要先安裝一些常用的工具,如Node、vue和Electron等。安裝Node進入Node官網下載頁http://nodejs.cn/download/,然後下載對應的版本即可,下載時建議下載穩定版本。
  • Vue的安裝及使用快速入門
    vue是一個JavaMVVM庫,是一套用於構建用戶界面的漸進式框架,是初創項目的首選前端框架。它是以數據驅動和組件化的思想構建的,採用自底向上增量開發的設計。它是輕量級的,它有很多獨立的功能或庫,我們會根據我們的項目來選用vue的一些功能。它提供了更加簡潔、更易於理解的API,使得我們能夠快速地上手並使用Vue.js。