@shijiu/jsview-vue 0.9.246 → 0.9.254
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dom/bin/package.json +11 -11
- package/dom/browser-root-style.css +21 -21
- package/loader/jsview-main.js +41 -41
- package/loader/jsview.config.default.js +37 -37
- package/loader/jsview.default.config.js +37 -37
- package/package.json +6 -6
- package/patches/node_modules/@babel/preset-env/lib/available-plugins.js +218 -218
- package/patches/node_modules/@vue/cli-plugin-typescript/index.js +100 -100
- package/patches/node_modules/@vue/cli-service/lib/commands/serve.js +395 -395
- package/patches/node_modules/@vue/cli-service/lib/config/app.js +272 -272
- package/patches/node_modules/@vue/cli-service/lib/config/assets.js +70 -70
- package/patches/node_modules/@vue/cli-service/lib/config/base.js +212 -212
- package/patches/node_modules/postcss-js/objectifier.js +90 -90
- package/patches/node_modules/vue-loader/dist/resolveScript.js +70 -70
- package/samples/AdvanceMetroWidget/App.vue +122 -122
- package/samples/AdvanceMetroWidget/Frame.vue +100 -100
- package/samples/AdvanceMetroWidget/Item.vue +57 -57
- package/samples/AdvanceMetroWidget/data.js +136 -136
- package/samples/AnimPicture/App.vue +223 -223
- package/samples/Basic/App.vue +128 -128
- package/samples/Basic/components/TitleBar.vue +28 -28
- package/samples/Basic/components/anim/AnimGroup.vue +67 -67
- package/samples/Basic/components/anim/AnimKeyframeBasic.vue +101 -101
- package/samples/Basic/components/anim/AnimKeyframeComposite.vue +52 -52
- package/samples/Basic/components/anim/AnimTransition.vue +116 -116
- package/samples/Basic/components/div/DivBackground.vue +14 -14
- package/samples/Basic/components/div/DivClip.vue +80 -80
- package/samples/Basic/components/div/DivCssScoped.vue +26 -26
- package/samples/Basic/components/div/DivCssVar.vue +49 -49
- package/samples/Basic/components/div/DivGroup1.vue +32 -32
- package/samples/Basic/components/div/DivGroup2.vue +40 -40
- package/samples/Basic/components/div/DivLayout.vue +11 -11
- package/samples/Basic/components/div/DivRadius.vue +46 -46
- package/samples/Basic/components/text/TextAlign.vue +47 -47
- package/samples/Basic/components/text/TextFontStyle.vue +57 -57
- package/samples/Basic/components/text/TextGroup.vue +31 -31
- package/samples/Basic/components/text/TextOverflow.vue +77 -77
- package/samples/BasicFocusControl/App.vue +124 -124
- package/samples/BasicFocusControl/components/BaseBlock.vue +50 -50
- package/samples/BasicFocusControl/components/MainArea.vue +97 -97
- package/samples/BasicFocusControl/components/MainAreaLeftBlock.vue +20 -20
- package/samples/BasicFocusControl/components/MainAreaRightBlock.vue +29 -29
- package/samples/BasicFocusControl/components/SideBar.vue +72 -72
- package/samples/BasicFocusControl/components/SideBarBlock.vue +29 -29
- package/samples/ClassNameDemo/App.vue +119 -119
- package/samples/ClassNameDemo/components/ContentItem.vue +252 -252
- package/samples/ClassNameDemo/components/LoadingView.vue +43 -43
- package/samples/ClassNameDemo/components/TitleView.vue +24 -24
- package/samples/ClassNameDemo/data.js +24 -24
- package/samples/ColorSpace/App.vue +134 -134
- package/samples/DemoHomepage/App.vue +31 -31
- package/samples/DemoHomepage/components/BodyFrame.vue +81 -81
- package/samples/DemoHomepage/components/Dialog.vue +93 -93
- package/samples/DemoHomepage/components/Item.vue +76 -76
- package/samples/DemoHomepage/components/TabFrame.vue +86 -86
- package/samples/DemoHomepage/router.js +132 -132
- package/samples/DemoHomepage/views/Homepage.vue +186 -186
- package/samples/FlipCard/App.vue +80 -80
- package/samples/FlipCard/FlipCard.vue +123 -123
- package/samples/FlipCard/data.js +12 -12
- package/samples/FlowMultiWidget/App.vue +90 -90
- package/samples/FlowMultiWidget/components/Block.vue +106 -106
- package/samples/FlowMultiWidget/components/FlowPage.vue +59 -59
- package/samples/FlowMultiWidget/components/Item.vue +102 -102
- package/samples/FlowMultiWidget/components/MenuItem.vue +71 -71
- package/samples/FlowMultiWidget/components/MyMenu.vue +89 -89
- package/samples/FlowMultiWidget/data.js +446 -446
- package/samples/HashHistory/App.vue +124 -124
- package/samples/HashHistory/components/HorizontalButtonList.vue +113 -113
- package/samples/HashHistory/components/Item.vue +73 -73
- package/samples/HashHistory/router.js +29 -29
- package/samples/HashHistory/views/BasePage.vue +18 -18
- package/samples/HashHistory/views/MainPage.vue +67 -67
- package/samples/HashHistory/views/SubPage.vue +78 -78
- package/samples/HashHistory/views/SubPageFirst.vue +9 -9
- package/samples/HashHistory/views/SubPageSecond.vue +9 -9
- package/samples/LongImage/App.vue +96 -96
- package/samples/LongImage/Button.vue +153 -153
- package/samples/LongImage/LongImageScroll.vue +126 -126
- package/samples/LongImage/Scroll.vue +15 -15
- package/samples/LongText/App.vue +111 -111
- package/samples/LongText/Button.vue +153 -153
- package/samples/LongText/LongTextScroll.vue +224 -224
- package/samples/LongText/Scroll.vue +15 -15
- package/samples/Preload/App.vue +145 -145
- package/samples/Preload/data.js +22 -22
- package/samples/Preload/preloadItem.vue +21 -21
- package/samples/QrcodeDemo/App.vue +72 -72
- package/samples/SimpleWidgetDemo/App.vue +203 -203
- package/samples/SimpleWidgetDemo/Item.vue +82 -82
- package/samples/SimpleWidgetDemo/components/ContentItem.vue +411 -411
- package/samples/SimpleWidgetDemo/components/MyTab.vue +116 -116
- package/samples/SimpleWidgetDemo/data.js +110 -110
- package/samples/SprayView/App.vue +269 -269
- package/samples/SpriteImage/App.vue +174 -174
- package/samples/SpriteImage/images/egg_break.json +116 -116
- package/samples/TextBox/App.vue +178 -178
- package/samples/TextBox/RenderCenter.vue +108 -108
- package/samples/TextBox/RenderLeft.vue +108 -108
- package/samples/TextBox/RenderOneLine.vue +119 -119
- package/samples/TextBox/RenderRight.vue +106 -106
- package/samples/TextShadowDemo/App.vue +97 -97
- package/samples/TextureSize/App.vue +141 -141
- package/samples/ThrowMoveDemo/AccelerateDemo.vue +117 -117
- package/samples/ThrowMoveDemo/App.vue +113 -113
- package/samples/ThrowMoveDemo/LRParabolicDemo.vue +115 -115
- package/samples/ThrowMoveDemo/TargetDemo.vue +116 -116
- package/samples/ThrowMoveDemo/UDParabolicDemo.vue +121 -121
- package/samples/TransitPage/App.vue +40 -40
- package/samples/VideoDemo/App.vue +137 -137
- package/samples/VideoDemo/components/Button.vue +68 -68
- package/samples/VideoDemo/components/Controllor.vue +195 -195
- package/samples/VideoDemo/components/VideoFrame.vue +152 -152
- package/scripts/common.js +115 -92
- package/scripts/deploy-fast-pack.js +17 -0
- package/scripts/deploy-fast-publish.js +44 -0
- package/scripts/{git-commit-empty.js → deploy-git-commit-empty.js} +21 -21
- package/scripts/{pre-pack.js → deploy-prepare.js} +56 -39
- package/scripts/{install-local-packages.js → jsview-install-local-packages.js} +73 -73
- package/scripts/{post-build.js → jsview-post-build.js} +127 -127
- package/scripts/{post-install.js → jsview-post-install.js} +78 -78
- package/scripts/{run-android.js → jsview-run-android.js} +64 -64
- package/scripts/make-js.sh +181 -181
- package/utils/JsViewEngineWidget/bin/index.js +1 -1
- package/utils/JsViewEngineWidget/bin/package.json +11 -11
- package/utils/JsViewVueTools/JsvHashHistory.js +111 -111
- package/utils/JsViewVueTools/JsvRuntimeBridge.js +417 -417
- package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserPreload.vue +80 -80
- package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserQrcode.vue +147 -147
- package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserSpray.vue +54 -54
- package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/ApicDataBase.js +28 -28
- package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/BrowserApic.vue +123 -123
- package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/GifData.js +83 -83
- package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/LoopToolBase.js +25 -25
- package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/NormalLoopTool.js +61 -61
- package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/PartLoopTool.js +119 -119
- package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/Viewer.js +106 -106
- package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/WebpData.js +141 -141
- package/utils/JsViewVueWidget/BrowserDebugWidget/WidgetLoader.js +20 -20
- package/utils/JsViewVueWidget/JsvActorMove/ActorControlBase.js +204 -204
- package/utils/JsViewVueWidget/JsvActorMove/JsvActorMove.vue +63 -63
- package/utils/JsViewVueWidget/JsvActorMove/JsvActorMoveControl.js +426 -426
- package/utils/JsViewVueWidget/JsvActorMove/index.js +12 -12
- package/utils/JsViewVueWidget/JsvApic/JsvApic.vue +178 -178
- package/utils/JsViewVueWidget/JsvApic/index.js +17 -17
- package/utils/JsViewVueWidget/JsvMarquee.vue +196 -196
- package/utils/JsViewVueWidget/JsvNinePatch.vue +76 -76
- package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +350 -350
- package/utils/JsViewVueWidget/JsvPreload/index.js +21 -21
- package/utils/JsViewVueWidget/JsvQrcode/JsvQrcode.vue +140 -140
- package/utils/JsViewVueWidget/JsvQrcode/index.js +18 -18
- package/utils/JsViewVueWidget/JsvSpray/JsvSpray.vue +139 -139
- package/utils/JsViewVueWidget/JsvSpray/index.js +14 -14
- package/utils/JsViewVueWidget/JsvSpriteAnim/JsvSpriteAnim.vue +447 -447
- package/utils/JsViewVueWidget/JsvSpriteAnim/SpriteController.js +56 -56
- package/utils/JsViewVueWidget/JsvSpriteAnim/index.js +6 -6
- package/utils/JsViewVueWidget/JsvSwiper/Indicator.vue +34 -34
- package/utils/JsViewVueWidget/JsvSwiper/JsvSwiper.vue +494 -494
- package/utils/JsViewVueWidget/JsvSwiper/index.js +9 -9
- package/utils/JsViewVueWidget/JsvSwiper3D/Indicator.vue +34 -34
- package/utils/JsViewVueWidget/JsvSwiper3D/JsvSwiper.vue +403 -403
- package/utils/JsViewVueWidget/JsvSwiper3D/index.js +9 -9
- package/utils/JsViewVueWidget/JsvTextBox.vue +110 -110
- package/utils/JsViewVueWidget/JsvVideo.vue +35 -35
- package/vetur.config.js +5 -5
- package/.gitmodules +0 -6
- package/README.md +0 -15
- package/doc/IMPORT_CHANGE_LOG.txt +0 -3
- package/doc/about-project-postinstall.md +0 -0
- package/doc/git_commit.md +0 -15
- package/doc/test_version_up.txt +0 -1
- package/scripts/update-version.js +0 -32
- package/shijiu-jsview-vue-0.9.246.tgz +0 -0
|
@@ -1,395 +1,395 @@
|
|
|
1
|
-
const {
|
|
2
|
-
info,
|
|
3
|
-
error,
|
|
4
|
-
hasProjectYarn,
|
|
5
|
-
hasProjectPnpm,
|
|
6
|
-
openBrowser,
|
|
7
|
-
IpcMessenger
|
|
8
|
-
} = require('@vue/cli-shared-utils')
|
|
9
|
-
|
|
10
|
-
const defaults = {
|
|
11
|
-
host: '0.0.0.0',
|
|
12
|
-
port: 8080,
|
|
13
|
-
https: false
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/** @type {import('@vue/cli-service').ServicePlugin} */
|
|
17
|
-
module.exports = (api, options) => {
|
|
18
|
-
api.registerCommand('serve', {
|
|
19
|
-
description: 'start development server',
|
|
20
|
-
usage: 'vue-cli-service serve [options] [entry]',
|
|
21
|
-
options: {
|
|
22
|
-
'--open': `open browser on server start`,
|
|
23
|
-
'--copy': `copy url to clipboard on server start`,
|
|
24
|
-
'--stdin': `close when stdin ends`,
|
|
25
|
-
'--mode': `specify env mode (default: development)`,
|
|
26
|
-
'--host': `specify host (default: ${defaults.host})`,
|
|
27
|
-
'--port': `specify port (default: ${defaults.port})`,
|
|
28
|
-
'--https': `use https (default: ${defaults.https})`,
|
|
29
|
-
'--public': `specify the public network URL for the HMR client`,
|
|
30
|
-
'--skip-plugins': `comma-separated list of plugin names to skip for this run`
|
|
31
|
-
}
|
|
32
|
-
}, async function serve (args) {
|
|
33
|
-
info('Starting development server...')
|
|
34
|
-
|
|
35
|
-
// although this is primarily a dev server, it is possible that we
|
|
36
|
-
// are running it in a mode with a production env, e.g. in E2E tests.
|
|
37
|
-
const isInContainer = checkInContainer()
|
|
38
|
-
const isProduction = process.env.NODE_ENV === 'production'
|
|
39
|
-
|
|
40
|
-
const url = require('url')
|
|
41
|
-
const { chalk } = require('@vue/cli-shared-utils')
|
|
42
|
-
const webpack = require('webpack')
|
|
43
|
-
const WebpackDevServer = require('webpack-dev-server')
|
|
44
|
-
const portfinder = require('portfinder')
|
|
45
|
-
const prepareURLs = require('../util/prepareURLs')
|
|
46
|
-
const prepareProxy = require('../util/prepareProxy')
|
|
47
|
-
const launchEditorMiddleware = require('launch-editor-middleware')
|
|
48
|
-
const validateWebpackConfig = require('../util/validateWebpackConfig')
|
|
49
|
-
const isAbsoluteUrl = require('../util/isAbsoluteUrl')
|
|
50
|
-
|
|
51
|
-
// configs that only matters for dev server
|
|
52
|
-
api.chainWebpack(webpackConfig => {
|
|
53
|
-
if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') {
|
|
54
|
-
if (!webpackConfig.get('devtool')) {
|
|
55
|
-
webpackConfig
|
|
56
|
-
.devtool('eval-cheap-module-source-map')
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
webpackConfig
|
|
60
|
-
.plugin('hmr')
|
|
61
|
-
.use(require('webpack/lib/HotModuleReplacementPlugin'))
|
|
62
|
-
|
|
63
|
-
// https://github.com/webpack/webpack/issues/6642
|
|
64
|
-
// https://github.com/vuejs/vue-cli/issues/3539
|
|
65
|
-
webpackConfig
|
|
66
|
-
.output
|
|
67
|
-
.globalObject(`(typeof self !== 'undefined' ? self : this)`)
|
|
68
|
-
|
|
69
|
-
if (!process.env.VUE_CLI_TEST && options.devServer.progress !== false) {
|
|
70
|
-
webpackConfig
|
|
71
|
-
.plugin('progress')
|
|
72
|
-
.use(webpack.ProgressPlugin)
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
// resolve webpack config
|
|
78
|
-
const webpackConfig = api.resolveWebpackConfig()
|
|
79
|
-
|
|
80
|
-
// check for common config errors
|
|
81
|
-
validateWebpackConfig(webpackConfig, api, options)
|
|
82
|
-
|
|
83
|
-
// load user devServer options with higher priority than devServer
|
|
84
|
-
// in webpack config
|
|
85
|
-
const projectDevServerOptions = Object.assign(
|
|
86
|
-
webpackConfig.devServer || {},
|
|
87
|
-
options.devServer
|
|
88
|
-
)
|
|
89
|
-
|
|
90
|
-
// expose advanced stats
|
|
91
|
-
if (args.dashboard) {
|
|
92
|
-
const DashboardPlugin = require('../webpack/DashboardPlugin')
|
|
93
|
-
;(webpackConfig.plugins = webpackConfig.plugins || []).push(new DashboardPlugin({
|
|
94
|
-
type: 'serve'
|
|
95
|
-
}))
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// entry arg
|
|
99
|
-
const entry = args._[0]
|
|
100
|
-
if (entry) {
|
|
101
|
-
webpackConfig.entry = {
|
|
102
|
-
app: api.resolve(entry)
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
// resolve server options
|
|
107
|
-
const useHttps = args.https || projectDevServerOptions.https || defaults.https
|
|
108
|
-
const protocol = useHttps ? 'https' : 'http'
|
|
109
|
-
const host = args.host || process.env.HOST || projectDevServerOptions.host || defaults.host
|
|
110
|
-
portfinder.basePort = args.port || process.env.PORT || projectDevServerOptions.port || defaults.port
|
|
111
|
-
const port = await portfinder.getPortPromise()
|
|
112
|
-
const rawPublicUrl = args.public || projectDevServerOptions.public
|
|
113
|
-
const publicUrl = rawPublicUrl
|
|
114
|
-
? /^[a-zA-Z]+:\/\//.test(rawPublicUrl)
|
|
115
|
-
? rawPublicUrl
|
|
116
|
-
: `${protocol}://${rawPublicUrl}`
|
|
117
|
-
: null
|
|
118
|
-
const publicHost = publicUrl ? /^[a-zA-Z]+:\/\/([^/?#]+)/.exec(publicUrl)[1] : undefined
|
|
119
|
-
|
|
120
|
-
const urls = prepareURLs(
|
|
121
|
-
protocol,
|
|
122
|
-
host,
|
|
123
|
-
port,
|
|
124
|
-
isAbsoluteUrl(options.publicPath) ? '/' : options.publicPath
|
|
125
|
-
)
|
|
126
|
-
const localUrlForBrowser = publicUrl || urls.localUrlForBrowser
|
|
127
|
-
|
|
128
|
-
const proxySettings = prepareProxy(
|
|
129
|
-
projectDevServerOptions.proxy,
|
|
130
|
-
api.resolve('public')
|
|
131
|
-
)
|
|
132
|
-
|
|
133
|
-
// inject dev & hot-reload middleware entries
|
|
134
|
-
if (!isProduction) {
|
|
135
|
-
const sockPath = projectDevServerOptions.sockPath || '/sockjs-node'
|
|
136
|
-
const sockjsUrl = publicUrl
|
|
137
|
-
// explicitly configured via devServer.public
|
|
138
|
-
? `?${publicUrl}&sockPath=${sockPath}`
|
|
139
|
-
: isInContainer
|
|
140
|
-
// can't infer public network url if inside a container...
|
|
141
|
-
// use client-side inference (note this would break with non-root publicPath)
|
|
142
|
-
? ``
|
|
143
|
-
// otherwise infer the url
|
|
144
|
-
: `?` + url.format({
|
|
145
|
-
protocol,
|
|
146
|
-
port,
|
|
147
|
-
hostname: urls.lanUrlForConfig || 'localhost'
|
|
148
|
-
}) + `&sockPath=${sockPath}`
|
|
149
|
-
const devClients = [
|
|
150
|
-
// dev server client
|
|
151
|
-
require.resolve(`webpack-dev-server/client`) + sockjsUrl,
|
|
152
|
-
// hmr client
|
|
153
|
-
require.resolve(projectDevServerOptions.hotOnly
|
|
154
|
-
? 'webpack/hot/only-dev-server'
|
|
155
|
-
: 'webpack/hot/dev-server')
|
|
156
|
-
// TODO custom overlay client
|
|
157
|
-
// `@vue/cli-overlay/dist/client`
|
|
158
|
-
]
|
|
159
|
-
if (process.env.APPVEYOR) {
|
|
160
|
-
devClients.push(`webpack/hot/poll?500`)
|
|
161
|
-
}
|
|
162
|
-
// inject dev/hot client
|
|
163
|
-
addDevClientToEntry(webpackConfig, devClients)
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// create compiler
|
|
167
|
-
const compiler = webpack(webpackConfig)
|
|
168
|
-
|
|
169
|
-
// handle compiler error
|
|
170
|
-
compiler.hooks.failed.tap('vue-cli-service serve', msg => {
|
|
171
|
-
error(msg)
|
|
172
|
-
process.exit(1)
|
|
173
|
-
})
|
|
174
|
-
|
|
175
|
-
// create server
|
|
176
|
-
const server = new WebpackDevServer(compiler, Object.assign({
|
|
177
|
-
logLevel: 'silent',
|
|
178
|
-
clientLogLevel: 'silent',
|
|
179
|
-
historyApiFallback: {
|
|
180
|
-
disableDotRule: true,
|
|
181
|
-
htmlAcceptHeaders: [
|
|
182
|
-
'text/html',
|
|
183
|
-
'application/xhtml+xml'
|
|
184
|
-
],
|
|
185
|
-
rewrites: genHistoryApiFallbackRewrites(options.publicPath, options.pages)
|
|
186
|
-
},
|
|
187
|
-
contentBase: api.resolve('public'),
|
|
188
|
-
watchContentBase: !isProduction,
|
|
189
|
-
hot: !isProduction,
|
|
190
|
-
injectClient: false,
|
|
191
|
-
compress: isProduction,
|
|
192
|
-
publicPath: options.publicPath,
|
|
193
|
-
overlay: isProduction // TODO disable this
|
|
194
|
-
? false
|
|
195
|
-
: { warnings: false, errors: true }
|
|
196
|
-
}, projectDevServerOptions, {
|
|
197
|
-
https: useHttps,
|
|
198
|
-
proxy: proxySettings,
|
|
199
|
-
public: publicHost,
|
|
200
|
-
// eslint-disable-next-line no-shadow
|
|
201
|
-
before (app, server) {
|
|
202
|
-
// launch editor support.
|
|
203
|
-
// this works with vue-devtools & @vue/cli-overlay
|
|
204
|
-
app.use('/__open-in-editor', launchEditorMiddleware(() => console.log(
|
|
205
|
-
`To specify an editor, specify the EDITOR env variable or ` +
|
|
206
|
-
`add "editor" field to your Vue project config.\n`
|
|
207
|
-
)))
|
|
208
|
-
// allow other plugins to register middlewares, e.g. PWA
|
|
209
|
-
api.service.devServerConfigFns.forEach(fn => fn(app, server))
|
|
210
|
-
// apply in project middlewares
|
|
211
|
-
projectDevServerOptions.before && projectDevServerOptions.before(app, server)
|
|
212
|
-
},
|
|
213
|
-
// avoid opening browser
|
|
214
|
-
open: false
|
|
215
|
-
}))
|
|
216
|
-
|
|
217
|
-
;['SIGINT', 'SIGTERM'].forEach(signal => {
|
|
218
|
-
process.on(signal, () => {
|
|
219
|
-
server.close(() => {
|
|
220
|
-
process.exit(0)
|
|
221
|
-
})
|
|
222
|
-
})
|
|
223
|
-
})
|
|
224
|
-
|
|
225
|
-
if (args.stdin) {
|
|
226
|
-
process.stdin.on('end', () => {
|
|
227
|
-
server.close(() => {
|
|
228
|
-
process.exit(0)
|
|
229
|
-
})
|
|
230
|
-
})
|
|
231
|
-
|
|
232
|
-
process.stdin.resume()
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// on appveyor, killing the process with SIGTERM causes execa to
|
|
236
|
-
// throw error
|
|
237
|
-
if (process.env.VUE_CLI_TEST) {
|
|
238
|
-
process.stdin.on('data', data => {
|
|
239
|
-
if (data.toString() === 'close') {
|
|
240
|
-
console.log('got close signal!')
|
|
241
|
-
server.close(() => {
|
|
242
|
-
process.exit(0)
|
|
243
|
-
})
|
|
244
|
-
}
|
|
245
|
-
})
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
return new Promise((resolve, reject) => {
|
|
249
|
-
// log instructions & open browser on first compilation complete
|
|
250
|
-
let isFirstCompile = true
|
|
251
|
-
compiler.hooks.done.tap('vue-cli-service serve', stats => {
|
|
252
|
-
if (stats.hasErrors()) {
|
|
253
|
-
return
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
let copied = ''
|
|
257
|
-
if (isFirstCompile && args.copy) {
|
|
258
|
-
try {
|
|
259
|
-
require('clipboardy').writeSync(localUrlForBrowser)
|
|
260
|
-
copied = chalk.dim('(copied to clipboard)')
|
|
261
|
-
} catch (_) {
|
|
262
|
-
/* catch exception if copy to clipboard isn't supported (e.g. WSL), see issue #3476 */
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
const networkUrl = publicUrl
|
|
267
|
-
? publicUrl.replace(/([^/])$/, '$1/')
|
|
268
|
-
: urls.lanUrlForTerminal
|
|
269
|
-
|
|
270
|
-
// JsView Added >>>>>
|
|
271
|
-
const fs = require('fs-extra')
|
|
272
|
-
const path = require('path')
|
|
273
|
-
const jsviewCacheDir = path.resolve('node_modules/.cache', 'jsview')
|
|
274
|
-
const networkFilePath = path.resolve(jsviewCacheDir, 'network')
|
|
275
|
-
fs.ensureDirSync(jsviewCacheDir);
|
|
276
|
-
fs.writeFileSync(networkFilePath, `module.exports="${networkUrl}"`)
|
|
277
|
-
// JsView Added <<<<<
|
|
278
|
-
|
|
279
|
-
console.log()
|
|
280
|
-
console.log(` App running at:`)
|
|
281
|
-
console.log(` - Local: ${chalk.cyan(urls.localUrlForTerminal)} ${copied}`)
|
|
282
|
-
if (!isInContainer) {
|
|
283
|
-
console.log(` - Network: ${chalk.cyan(networkUrl)}`)
|
|
284
|
-
} else {
|
|
285
|
-
console.log()
|
|
286
|
-
console.log(chalk.yellow(` It seems you are running Vue CLI inside a container.`))
|
|
287
|
-
if (!publicUrl && options.publicPath && options.publicPath !== '/') {
|
|
288
|
-
console.log()
|
|
289
|
-
console.log(chalk.yellow(` Since you are using a non-root publicPath, the hot-reload socket`))
|
|
290
|
-
console.log(chalk.yellow(` will not be able to infer the correct URL to connect. You should`))
|
|
291
|
-
console.log(chalk.yellow(` explicitly specify the URL via ${chalk.blue(`devServer.public`)}.`))
|
|
292
|
-
console.log()
|
|
293
|
-
}
|
|
294
|
-
console.log(chalk.yellow(` Access the dev server via ${chalk.cyan(
|
|
295
|
-
`${protocol}://localhost:<your container's external mapped port>${options.publicPath}`
|
|
296
|
-
)}`))
|
|
297
|
-
}
|
|
298
|
-
console.log()
|
|
299
|
-
|
|
300
|
-
if (isFirstCompile) {
|
|
301
|
-
isFirstCompile = false
|
|
302
|
-
|
|
303
|
-
if (!isProduction) {
|
|
304
|
-
const buildCommand = hasProjectYarn(api.getCwd()) ? `yarn build` : hasProjectPnpm(api.getCwd()) ? `pnpm run build` : `npm run build`
|
|
305
|
-
console.log(` Note that the development build is not optimized.`)
|
|
306
|
-
console.log(` To create a production build, run ${chalk.cyan(buildCommand)}.`)
|
|
307
|
-
} else {
|
|
308
|
-
console.log(` App is served in production mode.`)
|
|
309
|
-
console.log(` Note this is for preview or E2E testing only.`)
|
|
310
|
-
}
|
|
311
|
-
console.log()
|
|
312
|
-
|
|
313
|
-
if (args.open || projectDevServerOptions.open) {
|
|
314
|
-
const pageUri = (projectDevServerOptions.openPage && typeof projectDevServerOptions.openPage === 'string')
|
|
315
|
-
? projectDevServerOptions.openPage
|
|
316
|
-
: ''
|
|
317
|
-
openBrowser(localUrlForBrowser + pageUri)
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
// Send final app URL
|
|
321
|
-
if (args.dashboard) {
|
|
322
|
-
const ipc = new IpcMessenger()
|
|
323
|
-
ipc.send({
|
|
324
|
-
vueServe: {
|
|
325
|
-
url: localUrlForBrowser
|
|
326
|
-
}
|
|
327
|
-
})
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
// resolve returned Promise
|
|
331
|
-
// so other commands can do api.service.run('serve').then(...)
|
|
332
|
-
resolve({
|
|
333
|
-
server,
|
|
334
|
-
url: localUrlForBrowser
|
|
335
|
-
})
|
|
336
|
-
} else if (process.env.VUE_CLI_TEST) {
|
|
337
|
-
// signal for test to check HMR
|
|
338
|
-
console.log('App updated')
|
|
339
|
-
}
|
|
340
|
-
})
|
|
341
|
-
|
|
342
|
-
server.listen(port, host, err => {
|
|
343
|
-
if (err) {
|
|
344
|
-
reject(err)
|
|
345
|
-
}
|
|
346
|
-
})
|
|
347
|
-
})
|
|
348
|
-
})
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
function addDevClientToEntry (config, devClient) {
|
|
352
|
-
const { entry } = config
|
|
353
|
-
if (typeof entry === 'object' && !Array.isArray(entry)) {
|
|
354
|
-
Object.keys(entry).forEach((key) => {
|
|
355
|
-
entry[key] = devClient.concat(entry[key])
|
|
356
|
-
})
|
|
357
|
-
} else if (typeof entry === 'function') {
|
|
358
|
-
config.entry = entry(devClient)
|
|
359
|
-
} else {
|
|
360
|
-
config.entry = devClient.concat(entry)
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
// https://stackoverflow.com/a/20012536
|
|
365
|
-
function checkInContainer () {
|
|
366
|
-
if ('CODESANDBOX_SSE' in process.env) {
|
|
367
|
-
return true
|
|
368
|
-
}
|
|
369
|
-
const fs = require('fs')
|
|
370
|
-
if (fs.existsSync(`/proc/1/cgroup`)) {
|
|
371
|
-
const content = fs.readFileSync(`/proc/1/cgroup`, 'utf-8')
|
|
372
|
-
return /:\/(lxc|docker|kubepods(\.slice)?)\//.test(content)
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
function genHistoryApiFallbackRewrites (baseUrl, pages = {}) {
|
|
377
|
-
const path = require('path')
|
|
378
|
-
const multiPageRewrites = Object
|
|
379
|
-
.keys(pages)
|
|
380
|
-
// sort by length in reversed order to avoid overrides
|
|
381
|
-
// eg. 'page11' should appear in front of 'page1'
|
|
382
|
-
.sort((a, b) => b.length - a.length)
|
|
383
|
-
.map(name => ({
|
|
384
|
-
from: new RegExp(`^/${name}`),
|
|
385
|
-
to: path.posix.join(baseUrl, pages[name].filename || `${name}.html`)
|
|
386
|
-
}))
|
|
387
|
-
return [
|
|
388
|
-
...multiPageRewrites,
|
|
389
|
-
{ from: /./, to: path.posix.join(baseUrl, 'index.html') }
|
|
390
|
-
]
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
module.exports.defaultModes = {
|
|
394
|
-
serve: 'development'
|
|
395
|
-
}
|
|
1
|
+
const {
|
|
2
|
+
info,
|
|
3
|
+
error,
|
|
4
|
+
hasProjectYarn,
|
|
5
|
+
hasProjectPnpm,
|
|
6
|
+
openBrowser,
|
|
7
|
+
IpcMessenger
|
|
8
|
+
} = require('@vue/cli-shared-utils')
|
|
9
|
+
|
|
10
|
+
const defaults = {
|
|
11
|
+
host: '0.0.0.0',
|
|
12
|
+
port: 8080,
|
|
13
|
+
https: false
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** @type {import('@vue/cli-service').ServicePlugin} */
|
|
17
|
+
module.exports = (api, options) => {
|
|
18
|
+
api.registerCommand('serve', {
|
|
19
|
+
description: 'start development server',
|
|
20
|
+
usage: 'vue-cli-service serve [options] [entry]',
|
|
21
|
+
options: {
|
|
22
|
+
'--open': `open browser on server start`,
|
|
23
|
+
'--copy': `copy url to clipboard on server start`,
|
|
24
|
+
'--stdin': `close when stdin ends`,
|
|
25
|
+
'--mode': `specify env mode (default: development)`,
|
|
26
|
+
'--host': `specify host (default: ${defaults.host})`,
|
|
27
|
+
'--port': `specify port (default: ${defaults.port})`,
|
|
28
|
+
'--https': `use https (default: ${defaults.https})`,
|
|
29
|
+
'--public': `specify the public network URL for the HMR client`,
|
|
30
|
+
'--skip-plugins': `comma-separated list of plugin names to skip for this run`
|
|
31
|
+
}
|
|
32
|
+
}, async function serve (args) {
|
|
33
|
+
info('Starting development server...')
|
|
34
|
+
|
|
35
|
+
// although this is primarily a dev server, it is possible that we
|
|
36
|
+
// are running it in a mode with a production env, e.g. in E2E tests.
|
|
37
|
+
const isInContainer = checkInContainer()
|
|
38
|
+
const isProduction = process.env.NODE_ENV === 'production'
|
|
39
|
+
|
|
40
|
+
const url = require('url')
|
|
41
|
+
const { chalk } = require('@vue/cli-shared-utils')
|
|
42
|
+
const webpack = require('webpack')
|
|
43
|
+
const WebpackDevServer = require('webpack-dev-server')
|
|
44
|
+
const portfinder = require('portfinder')
|
|
45
|
+
const prepareURLs = require('../util/prepareURLs')
|
|
46
|
+
const prepareProxy = require('../util/prepareProxy')
|
|
47
|
+
const launchEditorMiddleware = require('launch-editor-middleware')
|
|
48
|
+
const validateWebpackConfig = require('../util/validateWebpackConfig')
|
|
49
|
+
const isAbsoluteUrl = require('../util/isAbsoluteUrl')
|
|
50
|
+
|
|
51
|
+
// configs that only matters for dev server
|
|
52
|
+
api.chainWebpack(webpackConfig => {
|
|
53
|
+
if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') {
|
|
54
|
+
if (!webpackConfig.get('devtool')) {
|
|
55
|
+
webpackConfig
|
|
56
|
+
.devtool('eval-cheap-module-source-map')
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
webpackConfig
|
|
60
|
+
.plugin('hmr')
|
|
61
|
+
.use(require('webpack/lib/HotModuleReplacementPlugin'))
|
|
62
|
+
|
|
63
|
+
// https://github.com/webpack/webpack/issues/6642
|
|
64
|
+
// https://github.com/vuejs/vue-cli/issues/3539
|
|
65
|
+
webpackConfig
|
|
66
|
+
.output
|
|
67
|
+
.globalObject(`(typeof self !== 'undefined' ? self : this)`)
|
|
68
|
+
|
|
69
|
+
if (!process.env.VUE_CLI_TEST && options.devServer.progress !== false) {
|
|
70
|
+
webpackConfig
|
|
71
|
+
.plugin('progress')
|
|
72
|
+
.use(webpack.ProgressPlugin)
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
// resolve webpack config
|
|
78
|
+
const webpackConfig = api.resolveWebpackConfig()
|
|
79
|
+
|
|
80
|
+
// check for common config errors
|
|
81
|
+
validateWebpackConfig(webpackConfig, api, options)
|
|
82
|
+
|
|
83
|
+
// load user devServer options with higher priority than devServer
|
|
84
|
+
// in webpack config
|
|
85
|
+
const projectDevServerOptions = Object.assign(
|
|
86
|
+
webpackConfig.devServer || {},
|
|
87
|
+
options.devServer
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
// expose advanced stats
|
|
91
|
+
if (args.dashboard) {
|
|
92
|
+
const DashboardPlugin = require('../webpack/DashboardPlugin')
|
|
93
|
+
;(webpackConfig.plugins = webpackConfig.plugins || []).push(new DashboardPlugin({
|
|
94
|
+
type: 'serve'
|
|
95
|
+
}))
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// entry arg
|
|
99
|
+
const entry = args._[0]
|
|
100
|
+
if (entry) {
|
|
101
|
+
webpackConfig.entry = {
|
|
102
|
+
app: api.resolve(entry)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// resolve server options
|
|
107
|
+
const useHttps = args.https || projectDevServerOptions.https || defaults.https
|
|
108
|
+
const protocol = useHttps ? 'https' : 'http'
|
|
109
|
+
const host = args.host || process.env.HOST || projectDevServerOptions.host || defaults.host
|
|
110
|
+
portfinder.basePort = args.port || process.env.PORT || projectDevServerOptions.port || defaults.port
|
|
111
|
+
const port = await portfinder.getPortPromise()
|
|
112
|
+
const rawPublicUrl = args.public || projectDevServerOptions.public
|
|
113
|
+
const publicUrl = rawPublicUrl
|
|
114
|
+
? /^[a-zA-Z]+:\/\//.test(rawPublicUrl)
|
|
115
|
+
? rawPublicUrl
|
|
116
|
+
: `${protocol}://${rawPublicUrl}`
|
|
117
|
+
: null
|
|
118
|
+
const publicHost = publicUrl ? /^[a-zA-Z]+:\/\/([^/?#]+)/.exec(publicUrl)[1] : undefined
|
|
119
|
+
|
|
120
|
+
const urls = prepareURLs(
|
|
121
|
+
protocol,
|
|
122
|
+
host,
|
|
123
|
+
port,
|
|
124
|
+
isAbsoluteUrl(options.publicPath) ? '/' : options.publicPath
|
|
125
|
+
)
|
|
126
|
+
const localUrlForBrowser = publicUrl || urls.localUrlForBrowser
|
|
127
|
+
|
|
128
|
+
const proxySettings = prepareProxy(
|
|
129
|
+
projectDevServerOptions.proxy,
|
|
130
|
+
api.resolve('public')
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
// inject dev & hot-reload middleware entries
|
|
134
|
+
if (!isProduction) {
|
|
135
|
+
const sockPath = projectDevServerOptions.sockPath || '/sockjs-node'
|
|
136
|
+
const sockjsUrl = publicUrl
|
|
137
|
+
// explicitly configured via devServer.public
|
|
138
|
+
? `?${publicUrl}&sockPath=${sockPath}`
|
|
139
|
+
: isInContainer
|
|
140
|
+
// can't infer public network url if inside a container...
|
|
141
|
+
// use client-side inference (note this would break with non-root publicPath)
|
|
142
|
+
? ``
|
|
143
|
+
// otherwise infer the url
|
|
144
|
+
: `?` + url.format({
|
|
145
|
+
protocol,
|
|
146
|
+
port,
|
|
147
|
+
hostname: urls.lanUrlForConfig || 'localhost'
|
|
148
|
+
}) + `&sockPath=${sockPath}`
|
|
149
|
+
const devClients = [
|
|
150
|
+
// dev server client
|
|
151
|
+
require.resolve(`webpack-dev-server/client`) + sockjsUrl,
|
|
152
|
+
// hmr client
|
|
153
|
+
require.resolve(projectDevServerOptions.hotOnly
|
|
154
|
+
? 'webpack/hot/only-dev-server'
|
|
155
|
+
: 'webpack/hot/dev-server')
|
|
156
|
+
// TODO custom overlay client
|
|
157
|
+
// `@vue/cli-overlay/dist/client`
|
|
158
|
+
]
|
|
159
|
+
if (process.env.APPVEYOR) {
|
|
160
|
+
devClients.push(`webpack/hot/poll?500`)
|
|
161
|
+
}
|
|
162
|
+
// inject dev/hot client
|
|
163
|
+
addDevClientToEntry(webpackConfig, devClients)
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// create compiler
|
|
167
|
+
const compiler = webpack(webpackConfig)
|
|
168
|
+
|
|
169
|
+
// handle compiler error
|
|
170
|
+
compiler.hooks.failed.tap('vue-cli-service serve', msg => {
|
|
171
|
+
error(msg)
|
|
172
|
+
process.exit(1)
|
|
173
|
+
})
|
|
174
|
+
|
|
175
|
+
// create server
|
|
176
|
+
const server = new WebpackDevServer(compiler, Object.assign({
|
|
177
|
+
logLevel: 'silent',
|
|
178
|
+
clientLogLevel: 'silent',
|
|
179
|
+
historyApiFallback: {
|
|
180
|
+
disableDotRule: true,
|
|
181
|
+
htmlAcceptHeaders: [
|
|
182
|
+
'text/html',
|
|
183
|
+
'application/xhtml+xml'
|
|
184
|
+
],
|
|
185
|
+
rewrites: genHistoryApiFallbackRewrites(options.publicPath, options.pages)
|
|
186
|
+
},
|
|
187
|
+
contentBase: api.resolve('public'),
|
|
188
|
+
watchContentBase: !isProduction,
|
|
189
|
+
hot: !isProduction,
|
|
190
|
+
injectClient: false,
|
|
191
|
+
compress: isProduction,
|
|
192
|
+
publicPath: options.publicPath,
|
|
193
|
+
overlay: isProduction // TODO disable this
|
|
194
|
+
? false
|
|
195
|
+
: { warnings: false, errors: true }
|
|
196
|
+
}, projectDevServerOptions, {
|
|
197
|
+
https: useHttps,
|
|
198
|
+
proxy: proxySettings,
|
|
199
|
+
public: publicHost,
|
|
200
|
+
// eslint-disable-next-line no-shadow
|
|
201
|
+
before (app, server) {
|
|
202
|
+
// launch editor support.
|
|
203
|
+
// this works with vue-devtools & @vue/cli-overlay
|
|
204
|
+
app.use('/__open-in-editor', launchEditorMiddleware(() => console.log(
|
|
205
|
+
`To specify an editor, specify the EDITOR env variable or ` +
|
|
206
|
+
`add "editor" field to your Vue project config.\n`
|
|
207
|
+
)))
|
|
208
|
+
// allow other plugins to register middlewares, e.g. PWA
|
|
209
|
+
api.service.devServerConfigFns.forEach(fn => fn(app, server))
|
|
210
|
+
// apply in project middlewares
|
|
211
|
+
projectDevServerOptions.before && projectDevServerOptions.before(app, server)
|
|
212
|
+
},
|
|
213
|
+
// avoid opening browser
|
|
214
|
+
open: false
|
|
215
|
+
}))
|
|
216
|
+
|
|
217
|
+
;['SIGINT', 'SIGTERM'].forEach(signal => {
|
|
218
|
+
process.on(signal, () => {
|
|
219
|
+
server.close(() => {
|
|
220
|
+
process.exit(0)
|
|
221
|
+
})
|
|
222
|
+
})
|
|
223
|
+
})
|
|
224
|
+
|
|
225
|
+
if (args.stdin) {
|
|
226
|
+
process.stdin.on('end', () => {
|
|
227
|
+
server.close(() => {
|
|
228
|
+
process.exit(0)
|
|
229
|
+
})
|
|
230
|
+
})
|
|
231
|
+
|
|
232
|
+
process.stdin.resume()
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// on appveyor, killing the process with SIGTERM causes execa to
|
|
236
|
+
// throw error
|
|
237
|
+
if (process.env.VUE_CLI_TEST) {
|
|
238
|
+
process.stdin.on('data', data => {
|
|
239
|
+
if (data.toString() === 'close') {
|
|
240
|
+
console.log('got close signal!')
|
|
241
|
+
server.close(() => {
|
|
242
|
+
process.exit(0)
|
|
243
|
+
})
|
|
244
|
+
}
|
|
245
|
+
})
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
return new Promise((resolve, reject) => {
|
|
249
|
+
// log instructions & open browser on first compilation complete
|
|
250
|
+
let isFirstCompile = true
|
|
251
|
+
compiler.hooks.done.tap('vue-cli-service serve', stats => {
|
|
252
|
+
if (stats.hasErrors()) {
|
|
253
|
+
return
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
let copied = ''
|
|
257
|
+
if (isFirstCompile && args.copy) {
|
|
258
|
+
try {
|
|
259
|
+
require('clipboardy').writeSync(localUrlForBrowser)
|
|
260
|
+
copied = chalk.dim('(copied to clipboard)')
|
|
261
|
+
} catch (_) {
|
|
262
|
+
/* catch exception if copy to clipboard isn't supported (e.g. WSL), see issue #3476 */
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
const networkUrl = publicUrl
|
|
267
|
+
? publicUrl.replace(/([^/])$/, '$1/')
|
|
268
|
+
: urls.lanUrlForTerminal
|
|
269
|
+
|
|
270
|
+
// JsView Added >>>>>
|
|
271
|
+
const fs = require('fs-extra')
|
|
272
|
+
const path = require('path')
|
|
273
|
+
const jsviewCacheDir = path.resolve('node_modules/.cache', 'jsview')
|
|
274
|
+
const networkFilePath = path.resolve(jsviewCacheDir, 'network')
|
|
275
|
+
fs.ensureDirSync(jsviewCacheDir);
|
|
276
|
+
fs.writeFileSync(networkFilePath, `module.exports="${networkUrl}"`)
|
|
277
|
+
// JsView Added <<<<<
|
|
278
|
+
|
|
279
|
+
console.log()
|
|
280
|
+
console.log(` App running at:`)
|
|
281
|
+
console.log(` - Local: ${chalk.cyan(urls.localUrlForTerminal)} ${copied}`)
|
|
282
|
+
if (!isInContainer) {
|
|
283
|
+
console.log(` - Network: ${chalk.cyan(networkUrl)}`)
|
|
284
|
+
} else {
|
|
285
|
+
console.log()
|
|
286
|
+
console.log(chalk.yellow(` It seems you are running Vue CLI inside a container.`))
|
|
287
|
+
if (!publicUrl && options.publicPath && options.publicPath !== '/') {
|
|
288
|
+
console.log()
|
|
289
|
+
console.log(chalk.yellow(` Since you are using a non-root publicPath, the hot-reload socket`))
|
|
290
|
+
console.log(chalk.yellow(` will not be able to infer the correct URL to connect. You should`))
|
|
291
|
+
console.log(chalk.yellow(` explicitly specify the URL via ${chalk.blue(`devServer.public`)}.`))
|
|
292
|
+
console.log()
|
|
293
|
+
}
|
|
294
|
+
console.log(chalk.yellow(` Access the dev server via ${chalk.cyan(
|
|
295
|
+
`${protocol}://localhost:<your container's external mapped port>${options.publicPath}`
|
|
296
|
+
)}`))
|
|
297
|
+
}
|
|
298
|
+
console.log()
|
|
299
|
+
|
|
300
|
+
if (isFirstCompile) {
|
|
301
|
+
isFirstCompile = false
|
|
302
|
+
|
|
303
|
+
if (!isProduction) {
|
|
304
|
+
const buildCommand = hasProjectYarn(api.getCwd()) ? `yarn build` : hasProjectPnpm(api.getCwd()) ? `pnpm run build` : `npm run build`
|
|
305
|
+
console.log(` Note that the development build is not optimized.`)
|
|
306
|
+
console.log(` To create a production build, run ${chalk.cyan(buildCommand)}.`)
|
|
307
|
+
} else {
|
|
308
|
+
console.log(` App is served in production mode.`)
|
|
309
|
+
console.log(` Note this is for preview or E2E testing only.`)
|
|
310
|
+
}
|
|
311
|
+
console.log()
|
|
312
|
+
|
|
313
|
+
if (args.open || projectDevServerOptions.open) {
|
|
314
|
+
const pageUri = (projectDevServerOptions.openPage && typeof projectDevServerOptions.openPage === 'string')
|
|
315
|
+
? projectDevServerOptions.openPage
|
|
316
|
+
: ''
|
|
317
|
+
openBrowser(localUrlForBrowser + pageUri)
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Send final app URL
|
|
321
|
+
if (args.dashboard) {
|
|
322
|
+
const ipc = new IpcMessenger()
|
|
323
|
+
ipc.send({
|
|
324
|
+
vueServe: {
|
|
325
|
+
url: localUrlForBrowser
|
|
326
|
+
}
|
|
327
|
+
})
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// resolve returned Promise
|
|
331
|
+
// so other commands can do api.service.run('serve').then(...)
|
|
332
|
+
resolve({
|
|
333
|
+
server,
|
|
334
|
+
url: localUrlForBrowser
|
|
335
|
+
})
|
|
336
|
+
} else if (process.env.VUE_CLI_TEST) {
|
|
337
|
+
// signal for test to check HMR
|
|
338
|
+
console.log('App updated')
|
|
339
|
+
}
|
|
340
|
+
})
|
|
341
|
+
|
|
342
|
+
server.listen(port, host, err => {
|
|
343
|
+
if (err) {
|
|
344
|
+
reject(err)
|
|
345
|
+
}
|
|
346
|
+
})
|
|
347
|
+
})
|
|
348
|
+
})
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
function addDevClientToEntry (config, devClient) {
|
|
352
|
+
const { entry } = config
|
|
353
|
+
if (typeof entry === 'object' && !Array.isArray(entry)) {
|
|
354
|
+
Object.keys(entry).forEach((key) => {
|
|
355
|
+
entry[key] = devClient.concat(entry[key])
|
|
356
|
+
})
|
|
357
|
+
} else if (typeof entry === 'function') {
|
|
358
|
+
config.entry = entry(devClient)
|
|
359
|
+
} else {
|
|
360
|
+
config.entry = devClient.concat(entry)
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// https://stackoverflow.com/a/20012536
|
|
365
|
+
function checkInContainer () {
|
|
366
|
+
if ('CODESANDBOX_SSE' in process.env) {
|
|
367
|
+
return true
|
|
368
|
+
}
|
|
369
|
+
const fs = require('fs')
|
|
370
|
+
if (fs.existsSync(`/proc/1/cgroup`)) {
|
|
371
|
+
const content = fs.readFileSync(`/proc/1/cgroup`, 'utf-8')
|
|
372
|
+
return /:\/(lxc|docker|kubepods(\.slice)?)\//.test(content)
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
function genHistoryApiFallbackRewrites (baseUrl, pages = {}) {
|
|
377
|
+
const path = require('path')
|
|
378
|
+
const multiPageRewrites = Object
|
|
379
|
+
.keys(pages)
|
|
380
|
+
// sort by length in reversed order to avoid overrides
|
|
381
|
+
// eg. 'page11' should appear in front of 'page1'
|
|
382
|
+
.sort((a, b) => b.length - a.length)
|
|
383
|
+
.map(name => ({
|
|
384
|
+
from: new RegExp(`^/${name}`),
|
|
385
|
+
to: path.posix.join(baseUrl, pages[name].filename || `${name}.html`)
|
|
386
|
+
}))
|
|
387
|
+
return [
|
|
388
|
+
...multiPageRewrites,
|
|
389
|
+
{ from: /./, to: path.posix.join(baseUrl, 'index.html') }
|
|
390
|
+
]
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
module.exports.defaultModes = {
|
|
394
|
+
serve: 'development'
|
|
395
|
+
}
|