feat: 初始化项目
This commit is contained in:
parent
7ac99e9ee8
commit
adb8d56e50
|
|
@ -0,0 +1,3 @@
|
|||
> 1%
|
||||
last 2 versions
|
||||
not dead
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[*.{js,jsx,ts,tsx,vue}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
NODE_ENV=production
|
||||
VUE_APP_BASE_API = 'http://127.0.0.1:9922/api/v1'
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
NODE_ENV=development
|
||||
VUE_APP_BASE_API = 'http://127.0.0.1:9922/api/v1'
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
|
||||
NODE_ENV=production
|
||||
VUE_APP_BASE_API = 'http://127.0.0.1:9922/api/v1'
|
||||
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
NODE_ENV=development
|
||||
VUE_APP_BASE_API = 'http://127.0.0.1:9922/api/v1'
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
NODE_ENV=production
|
||||
VUE_APP_BASE_API = 'http://127.0.0.1:9922/api/v1'
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
NODE_ENV=development
|
||||
VUE_APP_BASE_API = 'http://127.0.0.1:9922/api/v1'
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
src/config
|
||||
src/utils/bideo.js
|
||||
vue.config.js
|
||||
mock/
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
* @Description:
|
||||
* @Autor: ZY
|
||||
* @Date: 2020-12-07 10:30:20
|
||||
* @LastEditors: ZY
|
||||
* @LastEditTime: 2020-12-07 11:00:37
|
||||
*/
|
||||
module.exports = {
|
||||
root: true,
|
||||
env: {
|
||||
node: true
|
||||
},
|
||||
extends: [
|
||||
'plugin:vue/vue3-strongly-recommended',
|
||||
'@vue/standard',
|
||||
'@vue/typescript/recommended'
|
||||
],
|
||||
parserOptions: {
|
||||
ecmaVersion: 2020
|
||||
},
|
||||
rules: {
|
||||
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
||||
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
||||
'@typescript-eslint/ban-types': 'off',
|
||||
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
||||
'@typescript-eslint/member-delimiter-style': ['error',
|
||||
{
|
||||
multiline: {
|
||||
delimiter: 'none'
|
||||
},
|
||||
singleline: {
|
||||
delimiter: 'comma'
|
||||
}
|
||||
}],
|
||||
'@typescript-eslint/no-explicit-any': 'off',
|
||||
'space-before-function-paren': ['error', 'never'],
|
||||
'vue/array-bracket-spacing': 'error',
|
||||
'vue/arrow-spacing': 'error',
|
||||
'vue/block-spacing': 'error',
|
||||
'vue/brace-style': 'error',
|
||||
'vue/camelcase': 'error',
|
||||
'vue/comma-dangle': 'error',
|
||||
'vue/component-name-in-template-casing': 'error',
|
||||
'vue/eqeqeq': 'error',
|
||||
'vue/key-spacing': 'error',
|
||||
'vue/match-component-file-name': 'error',
|
||||
'vue/object-curly-spacing': 'error',
|
||||
'no-useless-escape': 'off',
|
||||
'@typescript-eslint/no-this-alias': [
|
||||
'error',
|
||||
{
|
||||
allowDestructuring: true, // Allow `const { props, state } = this`; false by default
|
||||
allowedNames: ['self'] // Allow `const self = this`; `[]` by default
|
||||
}
|
||||
],
|
||||
'vue/attribute-hyphenation': 'off',
|
||||
'vue/custom-event-name-casing': 'off'
|
||||
},
|
||||
overrides: [
|
||||
{
|
||||
files: [
|
||||
'**/__tests__/*.{j,t}s?(x)',
|
||||
'**/tests/unit/**/*.spec.{j,t}s?(x)'
|
||||
],
|
||||
env: {
|
||||
jest: true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
.DS_Store
|
||||
node_modules
|
||||
/dist
|
||||
|
||||
/tests/e2e/videos/
|
||||
/tests/e2e/screenshots/
|
||||
|
||||
|
||||
# local env files
|
||||
.env.local
|
||||
.env.*.local
|
||||
|
||||
# Log files
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
.vscode
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
language: node_js
|
||||
node_js: 10
|
||||
script: npm run test
|
||||
notifications:
|
||||
email: false
|
||||
|
|
@ -0,0 +1,129 @@
|
|||
@Library('devops') _
|
||||
|
||||
pipeline {
|
||||
agent {label 'jenkins-slave-jnlp'}
|
||||
environment { // https://stackoverflow.com/questions/53541489/updating-environment-global-variable-in-jenkins-pipeline-from-the-stage-level
|
||||
NAME="admin-tmpl"
|
||||
NAMESPACE="oppc-rcyj-web"
|
||||
SERVER_PORT="80"
|
||||
}
|
||||
|
||||
options {
|
||||
// timestamps() //日志会有时间
|
||||
skipDefaultCheckout() //删除隐式checkout scm语句
|
||||
// disableConcurrentBuilds() //禁止并行,会列队式等前面的任务完才进行下一个任务
|
||||
timeout(time: 1, unit: 'HOURS') //流水线超时设置1h
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Init'){
|
||||
steps {
|
||||
script{
|
||||
// 【测试环境】变量
|
||||
env.INGRESS_HOST='admin-tmpl-test.rencaiyoujia.cn'
|
||||
env.INGRESS_TLS_SECRET="rencaiyoujia-tls-secret"
|
||||
env.REPLICAS="1" //deployment的副本数
|
||||
KUBECONTEXT = "k8s-test-admin" //测试环境k8s
|
||||
NPM_RUN_BUILD_CMD="npm run build:test"
|
||||
DOCKERFILE_NAME="Dockerfile"
|
||||
|
||||
// 【生产环境】变量
|
||||
if( "${BRANCH_NAME}"== "master"){
|
||||
env.INGRESS_HOST='admin-tmpl.rencaiyoujia.com'
|
||||
env.INGRESS_TLS_SECRET="rencaiyoujia-tls-secret"
|
||||
env.REPLICAS="2"
|
||||
KUBECONTEXT="k8s-prod-admin" //生产环境k8s
|
||||
NPM_RUN_BUILD_CMD="npm run build:prod"
|
||||
DOCKERFILE_NAME="Dockerfile"
|
||||
}
|
||||
|
||||
// 【开发环境】变量
|
||||
if( "${BRANCH_NAME}"== "dev"){
|
||||
env.INGRESS_HOST='admin-tmpl-dev.rencaiyoujia.cn'
|
||||
env.INGRESS_TLS_SECRET="rencaiyoujia-tls-secret"
|
||||
env.REPLICAS="1"
|
||||
KUBECONTEXT="k8s-dev-admin" //开发环境k8s
|
||||
NPM_RUN_BUILD_CMD="npm run build:dev"
|
||||
DOCKERFILE_NAME="Dockerfile"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Checkout') {
|
||||
steps {
|
||||
checkout scm
|
||||
}
|
||||
}
|
||||
stage('npm打包') {
|
||||
steps {
|
||||
script{
|
||||
// sh 'npm config set registry https://registry.npm.taobao.org'
|
||||
sh 'npm install --registry=https://registry.npm.taobao.org'
|
||||
sh "${NPM_RUN_BUILD_CMD}"
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('DockerBuild') {
|
||||
steps {
|
||||
script{
|
||||
sh "rm -rf docker/dist;mv dist docker"
|
||||
devops.docker(env.NAME,dockerfile:"docker/${DOCKERFILE_NAME}",context:"docker").build().push()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Test') {
|
||||
steps {
|
||||
echo 'Testing..'
|
||||
}
|
||||
}
|
||||
|
||||
stage('Deploy') {
|
||||
parallel {
|
||||
stage('deploy ingress') {
|
||||
when {
|
||||
expression { env.INGRESS_HOST != null }
|
||||
}
|
||||
steps{
|
||||
sh """envsubst < k8smanifests/svc.yaml | kubectl --context ${KUBECONTEXT} apply -f - ;\
|
||||
envsubst < k8smanifests/ingress.yaml | kubectl --context ${KUBECONTEXT} apply -f - ;\
|
||||
"""
|
||||
}
|
||||
}
|
||||
stage('Deploy') {
|
||||
steps{
|
||||
sh """envsubst < k8smanifests/deploy.yaml ;\
|
||||
envsubst < k8smanifests/deploy.yaml | kubectl --context ${KUBECONTEXT} apply -f - ;\
|
||||
"""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
post{
|
||||
success{
|
||||
script{
|
||||
devops.dingtalk(env.NAME,env.DOCKERIMAGE,"构建成功 ✅")
|
||||
}
|
||||
}
|
||||
failure{
|
||||
script{
|
||||
devops.dingtalk(env.NAME,env.DOCKERIMAGE,"构建失败 ❌")
|
||||
}
|
||||
}
|
||||
unstable{
|
||||
script{
|
||||
devops.dingtalk(env.NAME,env.DOCKERIMAGE,"不稳定构建 ✅")
|
||||
}
|
||||
}
|
||||
aborted{
|
||||
script{
|
||||
devops.dingtalk(env.NAME,env.DOCKERIMAGE,"暂停或中断 ❌")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2021 rcyj
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* @Description:
|
||||
* @Author: ZY
|
||||
* @Date: 2020-12-07 10:30:20
|
||||
* @LastEditors: ZY
|
||||
* @LastEditTime: 2021-01-05 17:11:54
|
||||
*/
|
||||
module.exports = {
|
||||
presets: [
|
||||
'@vue/cli-plugin-babel/preset'
|
||||
],
|
||||
env: {
|
||||
development: {
|
||||
// babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require().
|
||||
// This plugin can significantly increase the speed of hot updates, when you have a large number of pages.
|
||||
// https://panjiachen.github.io/vue-element-admin-site/guide/advanced/lazy-loading.html
|
||||
plugins: [
|
||||
'dynamic-import-node'
|
||||
// [
|
||||
// 'component',
|
||||
// {
|
||||
// libraryName: 'element-plus',
|
||||
// styleLibraryName: 'theme-chalk'
|
||||
// }
|
||||
// ]
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
module.exports = {
|
||||
preset: '@vue/cli-plugin-unit-jest/presets/typescript-and-babel',
|
||||
transform: {
|
||||
'^.+\\.vue$': 'vue-jest'
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,128 @@
|
|||
{
|
||||
"name": "vue3-composition-admin",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"homepage": "https://RainManGO.github.io/vue3-composition-admin",
|
||||
"scripts": {
|
||||
"start": "concurrently \"npm run mock\" \"npm run serve:dev\"",
|
||||
"serve:dev": "cross-env NODE_ENV=development dotenv -e .env.dev.serve vue-cli-service serve",
|
||||
"build:dev": "cross-env NODE_ENV=production dotenv -e .env.dev.build vue-cli-service build",
|
||||
"serve:test": "cross-env NODE_ENV=development dotenv -e .env.test.serve vue-cli-service serve",
|
||||
"build:test": "cross-env NODE_ENV=production dotenv -e .env.test.build vue-cli-service build",
|
||||
"serve:prod": "cross-env NODE_ENV=development dotenv -e .env.prod.serve vue-cli-service serve",
|
||||
"build:prod": "cross-env NODE_ENV=production dotenv -e .env.prod.build vue-cli-service build",
|
||||
"test:unit": "vue-cli-service test:unit",
|
||||
"test:e2e": "vue-cli-service test:e2e",
|
||||
"lint": "vue-cli-service lint",
|
||||
"mock": "cd mock && ts-node-dev mock.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@dragndrop/vue-dropzone": "0.0.4",
|
||||
"@element-plus/icons": "^0.0.11",
|
||||
"@metamask/detect-provider": "^1.2.0",
|
||||
"@tinymce/tinymce-vue": "^4.0.0",
|
||||
"@walletconnect/client": "^1.7.1",
|
||||
"@walletconnect/qrcode-modal": "^1.7.1",
|
||||
"axios-mapper": "^0.5.4",
|
||||
"chalk": "^4.1.0",
|
||||
"clipboard": "^2.0.6",
|
||||
"core-js": "^3.6.5",
|
||||
"crypto-ts": "^1.0.2",
|
||||
"dayjs": "^1.10.3",
|
||||
"driver.js": "^0.9.8",
|
||||
"echarts": "^5.0.0",
|
||||
"element-plus": "^1.0.2-beta.35",
|
||||
"faker": "^5.1.0",
|
||||
"file-saver": "^2.0.5",
|
||||
"js-cookie": "^2.2.1",
|
||||
"js-md5": "^0.7.3",
|
||||
"jszip": "^3.5.0",
|
||||
"koa": "^2.13.0",
|
||||
"koa-body": "^4.2.0",
|
||||
"koa-logger": "^3.2.1",
|
||||
"koa-router": "^10.0.0",
|
||||
"koa2-cors": "^2.0.6",
|
||||
"lodash": "^4.17.20",
|
||||
"log4js": "^6.3.0",
|
||||
"moment": "^2.29.1",
|
||||
"normalize.css": "^8.0.1",
|
||||
"nprogress": "^0.2.0",
|
||||
"path-to-regexp": "^6.2.0",
|
||||
"reflect-metadata": "^0.1.13",
|
||||
"screenfull": "^5.0.2",
|
||||
"sortablejs": "^1.13.0",
|
||||
"tinymce": "5.6.2",
|
||||
"tronweb": "^4.1.0",
|
||||
"vue": "^3.0.5",
|
||||
"vue-class-component": "^8.0.0-0",
|
||||
"vue-draggable-next": "^2.0.1",
|
||||
"vue-i18n": "^9.0.0",
|
||||
"vue-image-crop-upload": "^2.5.0",
|
||||
"vue-property-decorator": "^9.1.2",
|
||||
"vue-router": "4.0",
|
||||
"vue3-count-to": "^1.0.7",
|
||||
"vuex": "^4.0.0-0",
|
||||
"vuex-module-decorators": "^1.0.1",
|
||||
"vuex-persistedstate": "^4.0.0-beta.1",
|
||||
"web3": "^1.7.0",
|
||||
"xlsx": "^0.16.9"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/clipboard": "^2.0.1",
|
||||
"@types/faker": "^5.1.5",
|
||||
"@types/file-saver": "^2.0.1",
|
||||
"@types/jest": "^24.0.19",
|
||||
"@types/js-cookie": "^2.2.6",
|
||||
"@types/koa": "^2.11.6",
|
||||
"@types/koa-logger": "^3.1.1",
|
||||
"@types/koa-router": "^7.4.1",
|
||||
"@types/koa2-cors": "^2.0.1",
|
||||
"@types/lodash": "^4.14.167",
|
||||
"@types/node": "^14.14.11",
|
||||
"@types/nprogress": "^0.2.0",
|
||||
"@types/sortablejs": "^1.10.6",
|
||||
"@types/tinymce": "^4.6.0",
|
||||
"@typescript-eslint/eslint-plugin": "^2.33.0",
|
||||
"@typescript-eslint/parser": "^2.33.0",
|
||||
"@vue/cli-plugin-babel": "~4.5.0",
|
||||
"@vue/cli-plugin-eslint": "~4.5.0",
|
||||
"@vue/cli-plugin-router": "~4.5.0",
|
||||
"@vue/cli-plugin-typescript": "~4.5.0",
|
||||
"@vue/cli-plugin-unit-jest": "~4.5.0",
|
||||
"@vue/cli-plugin-vuex": "~4.5.0",
|
||||
"@vue/cli-service": "~4.5.0",
|
||||
"@vue/compiler-sfc": "^3.0.0",
|
||||
"@vue/eslint-config-standard": "^5.1.2",
|
||||
"@vue/eslint-config-typescript": "^5.0.2",
|
||||
"@vue/test-utils": "^2.0.0-0",
|
||||
"babel-loader": "^8.2.2",
|
||||
"concurrently": "^5.3.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"dotenv-cli": "^4.0.0",
|
||||
"eslint": "^6.7.2",
|
||||
"eslint-plugin-import": "^2.20.2",
|
||||
"eslint-plugin-node": "^11.1.0",
|
||||
"eslint-plugin-promise": "^4.2.1",
|
||||
"eslint-plugin-standard": "^4.0.0",
|
||||
"eslint-plugin-vue": "^7.0.0-0",
|
||||
"lint-staged": "^9.5.0",
|
||||
"sass": "^1.26.5",
|
||||
"sass-loader": "^8.0.2",
|
||||
"style-loader": "^2.0.0",
|
||||
"style-resources-loader": "^1.4.1",
|
||||
"ts-node-dev": "^1.0.0",
|
||||
"typescript": "~4.0.3",
|
||||
"vue-cli-plugin-style-resources-loader": "^0.1.4",
|
||||
"vue-jest": "^5.0.0-alpha.8",
|
||||
"webpackbar": "^5.0.0-3"
|
||||
},
|
||||
"gitHooks": {
|
||||
"pre-commit": "lint-staged"
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.{js,jsx,vue,ts,tsx}": [
|
||||
"vue-cli-service lint",
|
||||
"git add"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"target": "esnext",
|
||||
"module": "esnext",
|
||||
"strict": true,
|
||||
"jsx": "preserve",
|
||||
"importHelpers": true,
|
||||
"moduleResolution": "node",
|
||||
"experimentalDecorators": true,
|
||||
"skipLibCheck": true,
|
||||
"esModuleInterop": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"suppressImplicitAnyIndexErrors":true,
|
||||
"sourceMap": true,
|
||||
"baseUrl": ".",
|
||||
"types": [
|
||||
"node",
|
||||
"webpack-env",
|
||||
"jest"
|
||||
],
|
||||
"paths": {
|
||||
"@/*": [
|
||||
"src/*"
|
||||
]
|
||||
},
|
||||
"lib": [
|
||||
"esnext",
|
||||
"dom",
|
||||
"dom.iterable",
|
||||
"scripthost"
|
||||
]
|
||||
},
|
||||
"include": [
|
||||
"src/**/*.ts",
|
||||
"src/**/*.tsx",
|
||||
"src/**/*.vue",
|
||||
"tests/**/*.ts",
|
||||
"tests/**/*.tsx"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules"
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
/*
|
||||
* @Description:配置文件
|
||||
* @Author: ZY
|
||||
* @Date: 2020-12-07 11:41:22
|
||||
* @LastEditors: ZY
|
||||
* @LastEditTime: 2021-01-27 15:17:29
|
||||
*/
|
||||
const { resolve } = require('path')
|
||||
const path = require('path')
|
||||
const WebpackBar = require('webpackbar');
|
||||
const dayjs = require('dayjs')
|
||||
const time = dayjs().format('YYYY-M-D HH:mm:ss')
|
||||
process.env.VUE_APP_UPDATE_TIME = time
|
||||
const {
|
||||
publicPath,
|
||||
assetsDir,
|
||||
outputDir,
|
||||
lintOnSave,
|
||||
transpileDependencies,
|
||||
title,
|
||||
devPort,
|
||||
} = require('./src/config/default/vue.custom.config')
|
||||
module.exports = {
|
||||
publicPath,
|
||||
assetsDir,
|
||||
outputDir,
|
||||
lintOnSave,
|
||||
transpileDependencies,
|
||||
// devServer: {
|
||||
// hot: true,
|
||||
// port: devPort,
|
||||
// open: true,
|
||||
// noInfo: false,
|
||||
// overlay: {
|
||||
// warnings: true,
|
||||
// errors: true,
|
||||
// },
|
||||
// },
|
||||
pluginOptions: {
|
||||
'style-resources-loader': {
|
||||
preProcessor: 'scss',
|
||||
patterns: [
|
||||
path.resolve(__dirname, 'src/styles/_variables.scss'),
|
||||
path.resolve(__dirname, 'src/styles/_mixins.scss'),
|
||||
]
|
||||
}
|
||||
},
|
||||
configureWebpack(){
|
||||
return {
|
||||
resolve:{
|
||||
alias:{
|
||||
'@':resolve('src'),
|
||||
'*':resolve(''),
|
||||
'Assets':resolve('src/assets')
|
||||
}
|
||||
},
|
||||
module:{
|
||||
rules: [
|
||||
{
|
||||
test: /\.(json5?|ya?ml)$/, // target json, json5, yaml and yml files
|
||||
loader: '@intlify/vue-i18n-loader',
|
||||
include: [ // Use `Rule.include` to specify the files of locale messages to be pre-compiled
|
||||
path.resolve(__dirname, 'src/lang')
|
||||
]
|
||||
},
|
||||
],
|
||||
},
|
||||
plugins:[
|
||||
new WebpackBar({
|
||||
name:title,
|
||||
})
|
||||
]
|
||||
}
|
||||
},
|
||||
}
|
||||
Loading…
Reference in New Issue