diff --git a/build/build-lib.js b/build/build-lib.js
index 2edcc4a0c93..f226ff7023e 100644
--- a/build/build-lib.js
+++ b/build/build-lib.js
@@ -12,8 +12,8 @@ const tasks = [
'node build/build-components.js --color',
'node build/build-style.js',
'node build/build-style-entry.js',
- 'cross-env NODE_ENV=production webpack --color --config build/webpack.build.js',
- 'cross-env NODE_ENV=production webpack -p --color --config build/webpack.build.js'
+ 'cross-env NODE_ENV=production webpack --color --config build/webpack.config.js',
+ 'cross-env NODE_ENV=production webpack -p --color --config build/webpack.config.js'
];
tasks.forEach(task => {
diff --git a/build/webpack.build.js b/build/webpack.config.js
similarity index 70%
rename from build/webpack.build.js
rename to build/webpack.config.js
index 37ebd8c169c..2a094159dca 100644
--- a/build/webpack.build.js
+++ b/build/webpack.config.js
@@ -1,11 +1,8 @@
const path = require('path');
-const config = require('./webpack.dev.js');
const isMinify = process.argv.indexOf('-p') !== -1;
-delete config.serve;
-
-module.exports = Object.assign(config, {
+module.exports = {
mode: 'production',
entry: {
vant: './es/index.js'
@@ -26,8 +23,19 @@ module.exports = Object.assign(config, {
amd: 'vue'
}
},
- performance: false,
optimization: {
minimize: isMinify
+ },
+ resolve: {
+ extensions: ['.js', '.ts', '.tsx']
+ },
+ module: {
+ rules: [
+ {
+ test: /\.(js|ts|tsx)$/,
+ exclude: /node_modules/,
+ use: 'babel-loader'
+ }
+ ]
}
-});
+};
diff --git a/build/webpack.dev.js b/build/webpack.dev.js
deleted file mode 100644
index 7ac1b4d3c40..00000000000
--- a/build/webpack.dev.js
+++ /dev/null
@@ -1,91 +0,0 @@
-const path = require('path');
-const HtmlWebpackPlugin = require('html-webpack-plugin');
-const ProgressBarPlugin = require('progress-bar-webpack-plugin');
-const { VueLoaderPlugin } = require('vue-loader');
-
-module.exports = {
- mode: 'development',
- entry: {
- 'vant-docs': './docs/site/index.js',
- 'vant-mobile': './docs/site/mobile.js'
- },
- output: {
- path: path.join(__dirname, '../docs/dist'),
- publicPath: '/',
- chunkFilename: 'async_[name].js'
- },
- stats: {
- modules: false,
- children: false
- },
- devServer: {
- open: true,
- host: '0.0.0.0',
- stats: 'errors-only',
- clientLogLevel: 'warning'
- },
- resolve: {
- extensions: ['.js', '.ts', '.tsx', '.vue', '.css']
- },
- module: {
- rules: [
- {
- test: /\.vue$/,
- use: [
- {
- loader: 'vue-loader',
- options: {
- compilerOptions: {
- preserveWhitespace: false
- }
- }
- }
- ]
- },
- {
- test: /\.(js|ts|tsx)$/,
- exclude: /node_modules/,
- use: 'babel-loader'
- },
- {
- test: /\.less$/,
- sideEffects: true,
- use: [
- 'style-loader',
- 'css-loader',
- 'postcss-loader',
- {
- loader: 'less-loader',
- options: {
- paths: [path.resolve(__dirname, 'node_modules')]
- }
- }
- ]
- },
- {
- test: /\.md$/,
- use: ['vue-loader', '@vant/markdown-loader']
- },
- {
- test: /\.(ttf|svg)$/,
- loader: 'url-loader'
- }
- ]
- },
- plugins: [
- new VueLoaderPlugin(),
- new ProgressBarPlugin(),
- new HtmlWebpackPlugin({
- chunks: ['vant-docs'],
- template: 'docs/site/index.tpl',
- filename: 'index.html',
- inject: true
- }),
- new HtmlWebpackPlugin({
- chunks: ['vant-mobile'],
- template: 'docs/site/index.tpl',
- filename: 'mobile.html',
- inject: true
- })
- ]
-};
diff --git a/build/webpack.doc.js b/build/webpack.doc.js
deleted file mode 100644
index 3146723c2a0..00000000000
--- a/build/webpack.doc.js
+++ /dev/null
@@ -1,14 +0,0 @@
-const path = require('path');
-const config = require('./webpack.dev.js');
-
-delete config.serve;
-
-module.exports = Object.assign(config, {
- mode: 'production',
- output: {
- path: path.join(__dirname, '../docs/dist'),
- publicPath: 'https://youzan.github.io/vant/',
- filename: '[name].[hash:8].js',
- chunkFilename: 'async_[name].[chunkhash:8].js'
- }
-});
diff --git a/docs/site/DocsApp.vue b/docs/site/DocsApp.vue
deleted file mode 100644
index 01f6588f97c..00000000000
--- a/docs/site/DocsApp.vue
+++ /dev/null
@@ -1,166 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/site/index.tpl b/docs/site/index.tpl
deleted file mode 100644
index 1a4bd73b428..00000000000
--- a/docs/site/index.tpl
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
- Vant - 轻量、可靠的移动端 Vue 组件库
-
-
-
-
-
-
-
-
diff --git a/package.json b/package.json
index 1ae68c31da2..43871597f33 100644
--- a/package.json
+++ b/package.json
@@ -14,12 +14,12 @@
],
"scripts": {
"bootstrap": "yarn || npm i",
- "dev": "npm run build:entry && webpack-dev-server --config build/webpack.dev.js",
+ "dev": "npm run build:entry && cd site && yarn serve",
"lint": "eslint ./src --ext .js,.vue,.ts,.tsx && stylelint \"src/**/*.less\" --fix",
"build:entry": "node build/build-entry.js",
"build:changelog": "vant-doc changelog ./docs/markdown/changelog.generated.md --tag 2.0.0",
"build:lib": "node build/build-lib.js",
- "build:site": "rm -rf docs/dist && cross-env NODE_ENV=production webpack --config build/webpack.doc.js && gh-pages -d docs/dist --add",
+ "build:site": "rm -rf site/dist && cd site && npm run build && gh-pages -d dist --add",
"test": "jest",
"test:watch": "jest --watch",
"test:clear-cache": "jest --clearCache",
@@ -89,7 +89,6 @@
"eslint": "^6.0.1",
"fast-glob": "^3.0.3",
"gh-pages": "^2.0.1",
- "html-webpack-plugin": "3.2.0",
"husky": "^3.0.0",
"jest": "^24.8.0",
"jest-serializer-vue": "^2.0.2",
@@ -98,7 +97,6 @@
"lint-staged": "^9.0.0",
"postcss": "^7.0.17",
"postcss-loader": "^3.0.0",
- "progress-bar-webpack-plugin": "^1.12.1",
"shelljs": "^0.8.3",
"signale": "^1.4.0",
"style-loader": "^0.23.1",
@@ -118,8 +116,7 @@
"vue-template-compiler": "2.6.10",
"vue-template-es2015-compiler": "^1.9.1",
"webpack": "4.35.2",
- "webpack-cli": "^3.3.5",
- "webpack-dev-server": "3.7.2"
+ "webpack-cli": "^3.3.5"
},
"sideEffects": [
"es/**/style/*",
diff --git a/site/babel.config.js b/site/babel.config.js
new file mode 100644
index 00000000000..3490e08caa5
--- /dev/null
+++ b/site/babel.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ presets: ['@vue/app']
+};
diff --git a/site/package.json b/site/package.json
new file mode 100644
index 00000000000..859c10874bc
--- /dev/null
+++ b/site/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "@vant/site",
+ "version": "1.0.0",
+ "scripts": {
+ "serve": "vue-cli-service serve",
+ "build": "yarn && vue-cli-service build"
+ },
+ "dependencies": {
+ "core-js": "^2.6.5",
+ "register-service-worker": "^1.6.2"
+ },
+ "devDependencies": {
+ "@vue/cli-plugin-babel": "^3.1.1",
+ "@vue/cli-plugin-typescript": "^3.8.1",
+ "@vue/cli-service": "^3.1.4"
+ },
+ "postcss": {
+ "plugins": {
+ "autoprefixer": {}
+ }
+ },
+ "browserslist": [
+ "> 1%",
+ "last 2 versions"
+ ]
+}
diff --git a/site/public/index.html b/site/public/index.html
new file mode 100644
index 00000000000..96f77412ba9
--- /dev/null
+++ b/site/public/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+ Vant - 轻量、可靠的移动端 Vue 组件库
+
+
+
+
+
+
diff --git a/docs/site/components/DemoList.vue b/site/src/components/DemoList.vue
similarity index 100%
rename from docs/site/components/DemoList.vue
rename to site/src/components/DemoList.vue
diff --git a/docs/site/components/DemoPages.vue b/site/src/components/DemoPages.vue
similarity index 100%
rename from docs/site/components/DemoPages.vue
rename to site/src/components/DemoPages.vue
diff --git a/docs/site/components/MobileNav.vue b/site/src/components/MobileNav.vue
similarity index 100%
rename from docs/site/components/MobileNav.vue
rename to site/src/components/MobileNav.vue
diff --git a/site/src/desktop/App.vue b/site/src/desktop/App.vue
new file mode 100644
index 00000000000..b03512f0422
--- /dev/null
+++ b/site/src/desktop/App.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/site/index.js b/site/src/desktop/main.js
similarity index 67%
rename from docs/site/index.js
rename to site/src/desktop/main.js
index 5a6f94c29a6..58487dd62f5 100644
--- a/docs/site/index.js
+++ b/site/src/desktop/main.js
@@ -1,9 +1,10 @@
import Vue from 'vue';
import VueRouter from 'vue-router';
import VantDoc from '@vant/doc';
-import App from './DocsApp';
-import routes from './router';
-import { isMobile, importAll } from './utils';
+import routes from '../router';
+import App from './App';
+import { isMobile, importAll } from '../utils';
+import '../sw';
if (isMobile) {
location.replace('mobile.html' + location.hash);
@@ -12,8 +13,8 @@ if (isMobile) {
Vue.use(VueRouter).use(VantDoc);
const docs = {};
-const docsFromMarkdown = require.context('../markdown', false, /(en-US|zh-CN)\.md$/);
-const docsFromPackages = require.context('../../src', true, /README(\.zh-CN)?\.md$/);
+const docsFromMarkdown = require.context('../../../docs/markdown', false, /(en-US|zh-CN)\.md$/);
+const docsFromPackages = require.context('../../../src', true, /README(\.zh-CN)?\.md$/);
importAll(docs, docsFromMarkdown);
importAll(docs, docsFromPackages);
diff --git a/docs/site/doc.config.js b/site/src/doc.config.js
similarity index 100%
rename from docs/site/doc.config.js
rename to site/src/doc.config.js
diff --git a/docs/site/WapApp.vue b/site/src/mobile/App.vue
similarity index 97%
rename from docs/site/WapApp.vue
rename to site/src/mobile/App.vue
index f306ad34d75..decd7229c8d 100644
--- a/docs/site/WapApp.vue
+++ b/site/src/mobile/App.vue
@@ -50,7 +50,7 @@ export default {