提交 8a9d88ba 编写于 作者: E Evan You

wip

上级 890f9296
const path = require('path')
const chalk = require('chalk')
const { serve, build } = require('../lib')
const sourceDir = path.resolve(__dirname, '../docs')
const sourceDir = path.resolve(process.cwd(), 'docs')
serve(sourceDir).catch(err => {
console.error(err)
})
const command = process.argv.slice(2)[0]
// build(sourceDir).catch(err => {
// console.log(err)
// })
if (command === 'build') {
wrapCommand(build)(sourceDir)
}
if (command === 'serve') {
wrapCommand(serve)(sourceDir)
}
function wrapCommand (fn) {
return (...args) => {
return fn(...args).catch(err => {
console.error(chalk.red(err.stack))
})
}
}
# Deploying
## GitHub Pages
## Netlify
# VuePress
> Minimalistic docs generator with Vue component based layout system
[Testing link](./layout.md)
export default {
created () {
if (this.$ssrContext) {
const title = getMetadata(this, 'title')
if (title) {
this.$ssrContext.title = title
}
const lang = getMetadata(this, 'lang')
if (lang) {
this.$ssrContext.lang = lang
}
}
},
mounted () {
const title = getMetadata(this, 'title')
if (title) {
document.title = title
}
const lang = getMetadata(this, 'lang')
if (lang) {
document.documentElement.lang = lang
}
},
render (h) {
return h(this.$page.componentName)
}
}
function getMetadata (vm, key) {
return vm.$page.frontmatter[key] || vm.$page[key]
}
......@@ -9,38 +9,41 @@ import './.temp/register-components'
// routes are generated from md files
import routes from './.temp/routes'
const router = new Router({
mode: 'history',
routes
})
// expose Vue Press data
const g = typeof window !== 'undefined' ? window : global
const $site = g.VUEPRESS_DATA
const inBrowser = typeof window !== 'undefined'
Vue.mixin({
computed: {
$site () {
return $site
return inBrowser ? window.VUEPRESS_DATA : this.$ssrContext.siteData
},
$page () {
return $site.pages[this.$route.path]
const path = this.$route.path
const pageId = path === '/' ? path : path.replace(/(\/|\.html)$/, '')
return this.$site.pages[pageId]
}
}
})
Vue.component('Content', {
functional: true,
render (h, { parent }) {
return h(parent.$page.componentName)
}
})
const app = new Vue({
router,
render (h) {
return h('router-view')
}
})
// component for rendering markdown content and setting title etc.
import Content from './Content'
Vue.component('Content', Content)
export function createApp () {
const router = new Router({
mode: 'history',
fallback: false,
routes
})
const app = new Vue({
router,
render (h) {
return h('div', { attrs: { id: 'app' }}, [
h('router-view')
])
}
})
export { app, router }
return { app, router }
}
import { app, router } from './app'
import { createApp } from './app'
const { app, router } = createApp()
router.onReady(() => {
app.$mount('#app')
......
<html lang="{{ lang }}">
<head>
<meta charset="utf-8">
<title>{{ title }}</title>
{{{ userHeadTags }}}
{{{ renderResourceHints() }}}
{{{ renderStyles() }}}
<script>
window.VUEPRESS_DATA = {{{ JSON.stringify(siteData) }}}
</script>
</head>
<body>
<!--vue-ssr-outlet-->
{{{ renderScripts() }}}
</body>
</html>
import { app, router } from './app'
import { createApp } from './app'
export default context => new Promise((resolve, reject) => {
const { app, router } = createApp()
const { url } = context
const { fullPath } = router.resolve(url).route
......
module.exports = async function build (sourceDir) {
process.env.NODE_ENV = 'production'
const prepare = require('./prepare')
const fs = require('fs')
const path = require('path')
const chalk = require('chalk')
const webpack = require('webpack')
const { promisify } = require('util')
const rimraf = promisify(require('rimraf'))
const mkdirp = promisify(require('mkdirp'))
const writeFile = promisify(fs.writeFile)
const prepare = require('./prepare')
const createClientConfig = require('./webpack/clientConfig')
const createServerConfig = require('./webpack/serverConfig')
const { createBundleRenderer } = require('vue-server-renderer')
const options = await prepare(sourceDir)
......@@ -17,10 +23,47 @@ module.exports = async function build (sourceDir) {
const clientConfig = createClientConfig(options).toConfig()
const serverConfig = createServerConfig(options).toConfig()
await Promise.all([
compile(clientConfig),
compile(serverConfig)
])
// compile!
await compile([clientConfig, serverConfig])
const serverBundle = require(path.resolve(targetDir, 'manifest/server.json'))
const clientManifest = require(path.resolve(targetDir, 'manifest/client.json'))
// remove manifests after loading them.
// await rimraf(path.resolve(targetDir, 'manifest'))
const renderer = createBundleRenderer(serverBundle, {
clientManifest,
runInNewContext: false,
shouldPrefetch: () => false,
inject: false,
template: fs.readFileSync(path.resolve(__dirname, 'app/index.ssr.html'), 'utf-8')
})
const userHeadTags = (options.siteConfig.head || [])
.map(renderHeadTag)
.join('\n ')
await Promise.all(Object.keys(options.siteData.pages).map(async (url) => {
const context = {
url,
userHeadTags,
siteData: options.siteData,
title: 'VuePress',
lang: 'en'
}
const html = await renderer.renderToString(context)
const { name } = options.siteData.pages[url]
if (name === 'index') {
await writeFile(path.join(targetDir, 'index.html'), html)
} else {
const dir = path.resolve(targetDir, name)
await mkdirp(dir)
await writeFile(path.join(dir, 'index.html'), html)
}
}))
function compile (config) {
return new Promise((resolve, reject) => {
......@@ -39,4 +82,23 @@ module.exports = async function build (sourceDir) {
})
})
}
function renderHeadTag (t) {
return `<${t.tag}${renderAttrs(t.attributes)}>${
t.innerHTML || ''
}${needsClosing(t.tag) ? `</${t.tag}>` : ``}`
}
function needsClosing (tag) {
return !(tag === 'link' || tag === 'meta')
}
function renderAttrs (attrs = {}) {
const keys = Object.keys(attrs)
if (keys.length) {
return ' ' + keys.map(name => `${name}="${attrs[name]}"`).join(' ')
} else {
return ''
}
}
}
<template>
<div id="container">
<ul>
<div class="theme-container">
<ul class="nav">
<li v-for="page in $site.pages">
<router-link :to="page.path">{{ page.name }}</router-link>
</li>
......
<template>
<div class="content">
<div class="page">
<Content/>
</div>
</template>
......@@ -26,22 +26,13 @@ async function resolveOptions (sourceDir) {
sourceDir,
publicPath: siteConfig.baseUrl || '/',
themePath: path.resolve(__dirname, 'default-theme/App.vue'),
templatePath: path.resolve(__dirname, 'default-theme/index.html'),
pages: await globby(['**/*.md'], { cwd: sourceDir })
}
// resolve theme & index template
const themeDir = path.resolve(sourceDir, '_theme')
if (fs.existsSync(themeDir)) {
const template = path.resolve(themeDir, 'index.html')
if (fs.existsSync(template)) {
options.templatePath = template
}
const app = path.resolve(themeDir, 'App.vue')
if (fs.existsSync(app)) {
options.themePath = app
}
// resolve theme
const themePath = path.resolve(sourceDir, '_theme/App.vue')
if (fs.existsSync(themePath)) {
options.themePath = themePath
}
const pagesData = {}
......
module.exports = async function serve (sourceDir) {
const path = require('path')
const chalk = require('chalk')
const prepare = require('./prepare')
const webpack = require('webpack')
......@@ -15,11 +16,13 @@ module.exports = async function serve (sourceDir) {
_config
.plugin('html')
.use(HTMLPlugin, [{ template: options.templatePath }])
.use(HTMLPlugin, [
{ template: path.resolve(__dirname, 'app/index.dev.html') }
])
_config
.plugin('site-data')
.use(SiteDataPlugin, [options.siteData])
.use(SiteDataPlugin, [options.siteData, options.siteConfig.head])
const config = _config.toConfig()
const compiler = webpack(config)
......
module.exports = class SiteDataPlugin {
constructor (data) {
constructor (data, head = []) {
this.data = data
this.head = head
}
apply (compiler) {
compiler.hooks.compilation.tap('vuepress-site-data', compilation => {
compilation.hooks.htmlWebpackPluginAlterAssetTags.tapAsync('vuepress-site-data', (data, cb) => {
try {
this.head.forEach(t => {
data.head.push({
tagName: t.tag,
closeTag: !(t.tag === 'meta' || t.tag === 'link'),
attributes: t.attributes,
innerHTML: t.innerHTML || ''
})
})
data.head.push({
tagName: 'script',
closeTag: true,
......
......@@ -18,7 +18,7 @@ module.exports = function createBaseConfig ({
.set('mode', isProd ? 'production' : 'development')
.output
.path(path.resolve(sourceDir, '_dist'))
.filename(isProd ? 'js/[name].[chunkhash:8].js' : 'js/[name].js')
.filename(isProd ? '_assets/js/[name].[chunkhash:8].js' : '_assets/js/[name].js')
.publicPath(publicPath)
config.resolve
......@@ -76,7 +76,7 @@ module.exports = function createBaseConfig ({
.loader('url-loader')
.options({
limit: inlineLimit,
name: `img/[name].[hash:8].[ext]`
name: `_assets/img/[name].[hash:8].[ext]`
})
// do not base64-inline SVGs.
......@@ -87,7 +87,7 @@ module.exports = function createBaseConfig ({
.use('file-loader')
.loader('file-loader')
.options({
name: `img/[name].[hash:8].[ext]`
name: `_assets/img/[name].[hash:8].[ext]`
})
config.module
......@@ -97,7 +97,7 @@ module.exports = function createBaseConfig ({
.loader('url-loader')
.options({
limit: inlineLimit,
name: `media/[name].[hash:8].[ext]`
name: `_assets/media/[name].[hash:8].[ext]`
})
config.module
......@@ -107,7 +107,7 @@ module.exports = function createBaseConfig ({
.loader('url-loader')
.options({
limit: inlineLimit,
name: `fonts/[name].[hash:8].[ext]`
name: `_assets/fonts/[name].[hash:8].[ext]`
})
function createCSSRule (lang, test, loader, options) {
......@@ -143,7 +143,7 @@ module.exports = function createBaseConfig ({
if (isProd) {
config
.plugin('extract-css')
.use(CSSExtractPlugin, [{ filename: 'css/styles.[hash:8].css' }])
.use(CSSExtractPlugin, [{ filename: '_assets/css/styles.[hash:8].css' }])
}
return config
......
......@@ -32,7 +32,9 @@ module.exports = function createClientConfig (options) {
const VueSSRClientPlugin = require('vue-server-renderer/client-plugin')
config
.plugin('ssr-client')
.use(VueSSRClientPlugin)
.use(VueSSRClientPlugin, [{
filename: 'manifest/client.json'
}])
}
config
......
......@@ -9,9 +9,7 @@ module.exports = function createServerConfig (options) {
config
.target('node')
.externals(nodeExternals({
whitelist: [/\.css$/, /\?vue&type=style/]
}))
.externals([/^vue|vue-router$/])
config
.entry('app')
......@@ -23,7 +21,9 @@ module.exports = function createServerConfig (options) {
config
.plugin('ssr-server')
.use(VueSSRServerPlugin)
.use(VueSSRServerPlugin, [{
filename: 'manifest/server.json'
}])
config
.plugin('bar')
......
......@@ -3,8 +3,12 @@
"version": "1.0.0",
"description": "Minimalistic doc generator with Vue component based layout system",
"main": "lib/index.js",
"bin": {
"vuepress": "bin/vuepress.js"
},
"scripts": {
"dev": "node bin/vuepress"
"serve": "node bin/vuepress serve",
"build": "node bin/vuepress build"
},
"repository": {
"type": "git",
......@@ -22,6 +26,9 @@
},
"homepage": "https://github.com/vuejs/vuepress#readme",
"dependencies": {
"autoprefixer": "^8.2.0",
"buble": "^0.19.3",
"buble-loader": "^0.5.0",
"chalk": "^2.3.2",
"connect-history-api-fallback": "^1.5.0",
"css-loader": "^0.28.11",
......@@ -32,7 +39,9 @@
"markdown-it": "^8.4.1",
"markdown-to-vue-loader": "^0.4.0",
"mini-css-extract-plugin": "^0.4.0",
"mkdirp": "^0.5.1",
"nprogress": "^0.2.0",
"postcss-loader": "^2.1.3",
"rimraf": "^2.6.2",
"url-loader": "^1.0.1",
"vue": "^2.5.16",
......
......@@ -59,7 +59,13 @@ acorn-dynamic-import@^3.0.0:
dependencies:
acorn "^5.0.0"
acorn@^5.0.0:
acorn-jsx@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-4.1.1.tgz#e8e41e48ea2fe0c896740610ab6a4ffd8add225e"
dependencies:
acorn "^5.0.3"
acorn@^5.0.0, acorn@^5.0.3, acorn@^5.4.1:
version "5.5.3"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9"
......@@ -242,6 +248,17 @@ autoprefixer@^6.3.1:
postcss "^5.2.16"
postcss-value-parser "^3.2.3"
autoprefixer@^8.2.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.2.0.tgz#1e49b611b31a5259b86b7a6b2b1b8faf091abe2a"
dependencies:
browserslist "^3.2.0"
caniuse-lite "^1.0.30000817"
normalize-range "^0.1.2"
num2fraction "^1.2.2"
postcss "^6.0.20"
postcss-value-parser "^3.2.3"
aws-sign2@~0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
......@@ -419,6 +436,32 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
caniuse-db "^1.0.30000639"
electron-to-chromium "^1.2.7"
browserslist@^3.2.0:
version "3.2.4"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.4.tgz#fb9ad70fd09875137ae943a31ab815ed76896031"
dependencies:
caniuse-lite "^1.0.30000821"
electron-to-chromium "^1.3.41"
buble-loader@^0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/buble-loader/-/buble-loader-0.5.0.tgz#bde97505c2b9310965579c2e4eebfb8d34819968"
dependencies:
loader-utils "^1.1.0"
buble@^0.19.3:
version "0.19.3"
resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.3.tgz#01e9412062cff1da6f20342b6ecd72e7bf699d02"
dependencies:
acorn "^5.4.1"
acorn-dynamic-import "^3.0.0"
acorn-jsx "^4.1.1"
chalk "^2.3.1"
magic-string "^0.22.4"
minimist "^1.2.0"
os-homedir "^1.0.1"
vlq "^1.0.0"
buffer-from@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531"
......@@ -511,6 +554,10 @@ caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
version "1.0.30000823"
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000823.tgz#e68e5f8c70783ef4059d2ea0de81f551651da6fc"
caniuse-lite@^1.0.30000817, caniuse-lite@^1.0.30000821:
version "1.0.30000823"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000823.tgz#b79842a5b5a48eaa416b73f5a5d7a23f52d26014"
capture-stack-trace@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
......@@ -529,7 +576,7 @@ chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.2:
chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65"
dependencies:
......@@ -801,6 +848,18 @@ core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
version "2.2.2"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892"
dependencies:
is-directory "^0.3.1"
js-yaml "^3.4.3"
minimist "^1.2.0"
object-assign "^4.1.0"
os-homedir "^1.0.1"
parse-json "^2.2.0"
require-from-string "^1.1.0"
cosmiconfig@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc"
......@@ -1194,6 +1253,10 @@ electron-to-chromium@^1.2.7:
version "1.3.41"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.41.tgz#7e33643e00cd85edfd17e04194f6d00e73737235"
electron-to-chromium@^1.3.41:
version "1.3.42"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.42.tgz#95c33bf01d0cc405556aec899fe61fd4d76ea0f9"
elliptic@^6.0.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
......@@ -1234,7 +1297,7 @@ errno@^0.1.3, errno@~0.1.7:
dependencies:
prr "~1.0.1"
error-ex@^1.3.1:
error-ex@^1.2.0, error-ex@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
dependencies:
......@@ -2128,7 +2191,7 @@ js-tokens@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
js-yaml@^3.10.0, js-yaml@^3.9.0:
js-yaml@^3.10.0, js-yaml@^3.4.3, js-yaml@^3.9.0:
version "3.11.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef"
dependencies:
......@@ -2407,6 +2470,12 @@ macaddress@^0.2.8:
version "0.2.8"
resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
magic-string@^0.22.4:
version "0.22.5"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e"
dependencies:
vlq "^0.2.2"
make-dir@^1.0.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b"
......@@ -2875,7 +2944,7 @@ os-browserify@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
os-homedir@^1.0.0:
os-homedir@^1.0.0, os-homedir@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
......@@ -2947,6 +3016,12 @@ parse-asn1@^5.0.0:
evp_bytestokey "^1.0.0"
pbkdf2 "^3.0.3"
parse-json@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
dependencies:
error-ex "^1.2.0"
parse-json@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
......@@ -3091,6 +3166,38 @@ postcss-filter-plugins@^2.0.0:
postcss "^5.0.4"
uniqid "^4.0.0"
postcss-load-config@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a"
dependencies:
cosmiconfig "^2.1.0"
object-assign "^4.1.0"
postcss-load-options "^1.2.0"
postcss-load-plugins "^2.3.0"
postcss-load-options@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c"
dependencies:
cosmiconfig "^2.1.0"
object-assign "^4.1.0"
postcss-load-plugins@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92"
dependencies:
cosmiconfig "^2.1.1"
object-assign "^4.1.0"
postcss-loader@^2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.1.3.tgz#eb210da734e475a244f76ccd61f9860f5bb3ee09"
dependencies:
loader-utils "^1.1.0"
postcss "^6.0.0"
postcss-load-config "^1.2.0"
schema-utils "^0.4.0"
postcss-merge-idents@^2.1.5:
version "2.1.7"
resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270"
......@@ -3276,7 +3383,7 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0
source-map "^0.5.6"
supports-color "^3.2.3"
postcss@^6.0.1, postcss@^6.0.14, postcss@^6.0.20:
postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.14, postcss@^6.0.20:
version "6.0.21"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.21.tgz#8265662694eddf9e9a5960db6da33c39e4cd069d"
dependencies:
......@@ -3581,6 +3688,10 @@ request@2.81.0:
tunnel-agent "^0.6.0"
uuid "^3.0.0"
require-from-string@^1.1.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418"
require-from-string@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.1.tgz#c545233e9d7da6616e9d59adfb39fc9f588676ff"
......@@ -3656,7 +3767,7 @@ sax@~1.2.1:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
schema-utils@^0.4.2, schema-utils@^0.4.3, schema-utils@^0.4.5:
schema-utils@^0.4.0, schema-utils@^0.4.2, schema-utils@^0.4.3, schema-utils@^0.4.5:
version "0.4.5"
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e"
dependencies:
......@@ -4354,6 +4465,14 @@ verror@1.10.0:
core-util-is "1.0.2"
extsprintf "^1.2.0"
vlq@^0.2.2:
version "0.2.3"
resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26"
vlq@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.0.tgz#8101be90843422954c2b13eb27f2f3122bdcc806"
vm-browserify@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册