feat: login
This commit is contained in:
parent
24b8b4c91d
commit
6dcc4753ae
|
@ -9,7 +9,7 @@ function App() {
|
|||
return (
|
||||
<AntDesignConfigProvider locale={zhCN}>
|
||||
<Routes>
|
||||
<Route key={"login"} path={"/login"} element={<Login />} />
|
||||
<Route index key={"login"} path={"/"} element={<Login />} />
|
||||
<Route key={"dash"} path={"/*"} element={<Layout />} />
|
||||
<Route path="*" element={<span>404</span>} />
|
||||
</Routes>
|
||||
|
|
|
@ -18,3 +18,8 @@ export interface ICreateCourseRequest extends ICourseBasic {
|
|||
course_chapterList: [];
|
||||
course_guide: {};
|
||||
}
|
||||
|
||||
export interface IAdminLogin {
|
||||
username: string;
|
||||
password: string;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import R from "./request";
|
||||
import P from "./process";
|
||||
import { ICreateCourseRequest, IgetVodRequest } from "./dto";
|
||||
import { IAdminLogin, ICreateCourseRequest, IgetVodRequest } from "./dto";
|
||||
|
||||
/**
|
||||
* 腾讯vod媒资
|
||||
|
@ -10,3 +10,6 @@ export const getVod = (p: IgetVodRequest) =>
|
|||
|
||||
export const createCourse = (p: ICreateCourseRequest) =>
|
||||
R.post("/api/course/create", { ...p });
|
||||
|
||||
export const adminLogin = (p: IAdminLogin) =>
|
||||
R.post("/api/admin/user/auth", { ...p });
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import React, { useEffect } from "react";
|
||||
import { useLocation } from "react-router-dom";
|
||||
import { useLocation, useNavigate } from "react-router-dom";
|
||||
import Cookie from "js-cookie";
|
||||
|
||||
interface IGuardProps {
|
||||
children: JSX.Element;
|
||||
|
@ -7,9 +8,11 @@ interface IGuardProps {
|
|||
|
||||
export const Guard = (props: IGuardProps) => {
|
||||
const location = useLocation();
|
||||
const navigate = useNavigate();
|
||||
|
||||
useEffect(() => {
|
||||
console.log("location.pathname changed 拦截", location.pathname);
|
||||
const sign = Cookie.get("_sign_admin");
|
||||
if (!sign) navigate("/");
|
||||
}, [location.pathname]);
|
||||
|
||||
return props.children;
|
||||
|
|
|
@ -11,7 +11,7 @@ interface IRoute extends IRouteMenuItem {
|
|||
|
||||
export const navRoutes: IRoute[] = [
|
||||
{
|
||||
path: "/",
|
||||
path: "/overview",
|
||||
element: lazy(() => import("../view/Overview")),
|
||||
name: "总览",
|
||||
},
|
||||
|
|
|
@ -1,12 +1,5 @@
|
|||
#root {
|
||||
background-image: linear-gradient(
|
||||
to right,
|
||||
#e95659,
|
||||
#e15084,
|
||||
#c55aaa,
|
||||
#976bc4,
|
||||
#5678ce
|
||||
);
|
||||
background: #f5f5f5;
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,13 +1,21 @@
|
|||
import { Button, Checkbox, Form, Input } from "antd";
|
||||
import { Button, Checkbox, Form, Input, message } from "antd";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
import { adminLogin } from "../../api";
|
||||
import "./index.less";
|
||||
|
||||
const Login = () => {
|
||||
const navigate = useNavigate();
|
||||
|
||||
const onFinish = (values: any) => {
|
||||
console.log("Success:", values);
|
||||
navigate("/");
|
||||
adminLogin(values).then((res: any) => {
|
||||
const { code } = res;
|
||||
if (code == 10000) {
|
||||
message.success("登录成功");
|
||||
navigate("/overview");
|
||||
} else {
|
||||
message.error(res.msg);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
|
@ -51,10 +59,6 @@ const Login = () => {
|
|||
<Input.Password placeholder="密码" />
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item name="remember" valuePropName="checked">
|
||||
<Checkbox>记住我</Checkbox>
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item wrapperCol={{ span: 24 }}>
|
||||
<Button type="primary" htmlType="submit" block>
|
||||
登录
|
||||
|
|
|
@ -4,4 +4,5 @@
|
|||
export enum BizCode {
|
||||
OK = 10000,
|
||||
ERROR = 20000,
|
||||
AUTH = 40000,
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ import { join } from 'path';
|
|||
import { DefaultErrorFilter } from './filter/default.filter';
|
||||
import { NotFoundFilter } from './filter/notfound.filter';
|
||||
import { ReportMiddleware } from './middleware/report.middleware';
|
||||
import { LocalMiddleware } from './middleware/local.middleware';
|
||||
import { AuthMiddleware } from './middleware/auth.middleware';
|
||||
|
||||
dotenv.config();
|
||||
|
||||
|
@ -36,7 +36,7 @@ export class ContainerLifeCycle {
|
|||
|
||||
async onReady() {
|
||||
// add middleware
|
||||
this.app.useMiddleware([ReportMiddleware, LocalMiddleware]);
|
||||
this.app.useMiddleware([ReportMiddleware, AuthMiddleware]);
|
||||
// add filter
|
||||
this.app.useFilter([NotFoundFilter, DefaultErrorFilter]);
|
||||
}
|
||||
|
|
25
apps/server/src/controller/admin.controller.ts
Normal file
25
apps/server/src/controller/admin.controller.ts
Normal file
|
@ -0,0 +1,25 @@
|
|||
import { Body, Controller, Inject, Post } from '@midwayjs/core';
|
||||
import { Context } from '@midwayjs/koa';
|
||||
import { BizCode } from '../biz/code';
|
||||
import { createToken } from '../util/encrypt';
|
||||
|
||||
@Controller('/admin')
|
||||
export class AdminController {
|
||||
@Inject()
|
||||
ctx: Context;
|
||||
|
||||
@Post('/user/auth')
|
||||
async AdminAuth(@Body() params) {
|
||||
const { username, password } = params as any;
|
||||
const token = createToken({ login: true });
|
||||
if (username === 'admin' && password === '123123') {
|
||||
this.ctx.cookies.set('_sign_admin', token, {
|
||||
expires: new Date(Date.now() + 10 * 60 * 1000),
|
||||
httpOnly: false,
|
||||
});
|
||||
this.ctx.body = { code: BizCode.OK };
|
||||
} else {
|
||||
this.ctx.body = { code: BizCode.ERROR, msg: '用户名密码错误' };
|
||||
}
|
||||
}
|
||||
}
|
25
apps/server/src/middleware/auth.middleware.ts
Normal file
25
apps/server/src/middleware/auth.middleware.ts
Normal file
|
@ -0,0 +1,25 @@
|
|||
import { Middleware, IMiddleware } from '@midwayjs/core';
|
||||
import { NextFunction, Context } from '@midwayjs/koa';
|
||||
// import { BizCode } from '../biz/code';
|
||||
// import { decodeToken } from '../util/encrypt';
|
||||
|
||||
@Middleware()
|
||||
export class AuthMiddleware implements IMiddleware<Context, NextFunction> {
|
||||
resolve() {
|
||||
return async (ctx: Context, next: NextFunction) => {
|
||||
// const isAdminUrl = ctx.url;
|
||||
// console.log('isAdminUrl', isAdminUrl);
|
||||
// if (isAdminUrl) {
|
||||
// const signToken = ctx.cookies.get('_sign_admin');
|
||||
// const { login } = decodeToken(signToken);
|
||||
// if (!login) return { code: BizCode.AUTH };
|
||||
// }
|
||||
|
||||
await next();
|
||||
};
|
||||
}
|
||||
|
||||
static getName(): string {
|
||||
return 'auth';
|
||||
}
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
import { Middleware, IMiddleware } from '@midwayjs/core';
|
||||
import { NextFunction, Context } from '@midwayjs/koa';
|
||||
|
||||
const locals = {
|
||||
assets: 'public/',
|
||||
version: Date.now(),
|
||||
};
|
||||
|
||||
@Middleware()
|
||||
export class LocalMiddleware implements IMiddleware<Context, NextFunction> {
|
||||
resolve() {
|
||||
return async (ctx: Context, next: NextFunction) => {
|
||||
ctx.locals = locals;
|
||||
await next();
|
||||
};
|
||||
}
|
||||
|
||||
static getName(): string {
|
||||
return 'local';
|
||||
}
|
||||
}
|
|
@ -17,8 +17,7 @@
|
|||
"@ricons/fluent": "0.12.0",
|
||||
"@ricons/utils": "0.1.6",
|
||||
"dplayer": "1.27.1",
|
||||
"highlight.js": "11.7.0",
|
||||
"js-cookie": "3.0.1"
|
||||
"highlight.js": "11.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/react": "^18.0.27",
|
||||
|
@ -28,7 +27,6 @@
|
|||
"vite-tsconfig-paths": "4.0.5",
|
||||
"typescript": "^4.9.3",
|
||||
"vite": "^4.1.0",
|
||||
"@types/dplayer": "1.25.2",
|
||||
"@types/js-cookie": "3.0.3"
|
||||
"@types/dplayer": "1.25.2"
|
||||
}
|
||||
}
|
|
@ -49,11 +49,13 @@
|
|||
"@babel/core": "7.21.0",
|
||||
"rollup-plugin-dts": "5.2.0",
|
||||
"axios": "1.3.4",
|
||||
"dayjs": "1.11.7"
|
||||
"dayjs": "1.11.7",
|
||||
"@types/js-cookie": "3.0.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"object-hash": "^3.0.0",
|
||||
"vditor": "3.9.0",
|
||||
"zustand": "4.3.6"
|
||||
"zustand": "4.3.6",
|
||||
"js-cookie": "3.0.1"
|
||||
}
|
||||
}
|
111
pnpm-lock.yaml
111
pnpm-lock.yaml
|
@ -11,6 +11,7 @@ importers:
|
|||
'@rollup/plugin-node-resolve': 15.0.1
|
||||
'@rollup/plugin-terser': 0.4.0
|
||||
'@rollup/plugin-typescript': 11.0.0
|
||||
'@types/js-cookie': 3.0.3
|
||||
'@types/node': ^18.13.0
|
||||
autoprefixer: 10.4.13
|
||||
axios: 1.3.4
|
||||
|
@ -21,6 +22,7 @@ importers:
|
|||
css-loader: 6.7.3
|
||||
dayjs: 1.11.7
|
||||
inquirer: 8.0.0
|
||||
js-cookie: 3.0.1
|
||||
less: 3.8.0
|
||||
less-loader: 4.1.0
|
||||
mini-css-extract-plugin: 2.7.2
|
||||
|
@ -46,6 +48,7 @@ importers:
|
|||
webpack-cli: ^5.0.1
|
||||
zustand: 4.3.6
|
||||
dependencies:
|
||||
js-cookie: 3.0.1
|
||||
object-hash: registry.npmmirror.com/object-hash/3.0.0
|
||||
vditor: registry.npmmirror.com/vditor/3.9.0
|
||||
zustand: registry.npmmirror.com/zustand/4.3.6
|
||||
|
@ -57,6 +60,7 @@ importers:
|
|||
'@rollup/plugin-node-resolve': registry.npmmirror.com/@rollup/plugin-node-resolve/15.0.1_rollup@3.17.2
|
||||
'@rollup/plugin-terser': registry.npmmirror.com/@rollup/plugin-terser/0.4.0_rollup@3.17.2
|
||||
'@rollup/plugin-typescript': registry.npmmirror.com/@rollup/plugin-typescript/11.0.0_vi3xdhr63abcxdtwtptol35g5u
|
||||
'@types/js-cookie': 3.0.3
|
||||
'@types/node': registry.npmmirror.com/@types/node/18.13.0
|
||||
autoprefixer: registry.npmmirror.com/autoprefixer/10.4.13_postcss@8.4.21
|
||||
axios: 1.3.4
|
||||
|
@ -199,14 +203,12 @@ importers:
|
|||
'@ricons/fluent': 0.12.0
|
||||
'@ricons/utils': 0.1.6
|
||||
'@types/dplayer': 1.25.2
|
||||
'@types/js-cookie': 3.0.3
|
||||
'@types/react': ^18.0.27
|
||||
'@types/react-dom': ^18.0.10
|
||||
'@types/react-router-dom': 5.3.3
|
||||
'@vitejs/plugin-react': ^3.1.0
|
||||
dplayer: 1.27.1
|
||||
highlight.js: 11.7.0
|
||||
js-cookie: 3.0.1
|
||||
less: ^4.1.3
|
||||
react: ^18.2.0
|
||||
react-dom: ^18.2.0
|
||||
|
@ -220,14 +222,12 @@ importers:
|
|||
'@ricons/utils': 0.1.6_biqbaboplfbrettd7655fr4n2y
|
||||
dplayer: 1.27.1
|
||||
highlight.js: 11.7.0
|
||||
js-cookie: 3.0.1
|
||||
less: 4.1.3
|
||||
react: 18.2.0
|
||||
react-dom: 18.2.0_react@18.2.0
|
||||
react-router-dom: 6.8.0_biqbaboplfbrettd7655fr4n2y
|
||||
devDependencies:
|
||||
'@types/dplayer': 1.25.2
|
||||
'@types/js-cookie': 3.0.3
|
||||
'@types/react': 18.0.27
|
||||
'@types/react-dom': 18.0.10
|
||||
'@types/react-router-dom': 5.3.3
|
||||
|
@ -2323,6 +2323,14 @@ packages:
|
|||
requiresBuild: true
|
||||
optional: true
|
||||
|
||||
/mkdirp/0.5.6:
|
||||
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
minimist: registry.npmmirror.com/minimist/1.2.8
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/nanoid/3.3.4:
|
||||
resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
|
||||
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||
|
@ -2411,6 +2419,14 @@ packages:
|
|||
resolution: {integrity: sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==}
|
||||
dev: false
|
||||
|
||||
/promise/7.3.1:
|
||||
resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
asap: registry.npmmirror.com/asap/2.0.6
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/prop-types/15.8.1:
|
||||
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
|
||||
dependencies:
|
||||
|
@ -2549,6 +2565,35 @@ packages:
|
|||
jsesc: 0.5.0
|
||||
dev: true
|
||||
|
||||
/request/2.88.2:
|
||||
resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==}
|
||||
engines: {node: '>= 6'}
|
||||
deprecated: request has been deprecated, see https://github.com/request/request/issues/3142
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
aws-sign2: registry.npmmirror.com/aws-sign2/0.7.0
|
||||
aws4: registry.npmmirror.com/aws4/1.12.0
|
||||
caseless: registry.npmmirror.com/caseless/0.12.0
|
||||
combined-stream: registry.npmmirror.com/combined-stream/1.0.8
|
||||
extend: registry.npmmirror.com/extend/3.0.2
|
||||
forever-agent: registry.npmmirror.com/forever-agent/0.6.1
|
||||
form-data: registry.npmmirror.com/form-data/2.3.3
|
||||
har-validator: registry.npmmirror.com/har-validator/5.1.5
|
||||
http-signature: registry.npmmirror.com/http-signature/1.2.0
|
||||
is-typedarray: registry.npmmirror.com/is-typedarray/1.0.0
|
||||
isstream: registry.npmmirror.com/isstream/0.1.2
|
||||
json-stringify-safe: registry.npmmirror.com/json-stringify-safe/5.0.1
|
||||
mime-types: registry.npmmirror.com/mime-types/2.1.35
|
||||
oauth-sign: registry.npmmirror.com/oauth-sign/0.9.0
|
||||
performance-now: registry.npmmirror.com/performance-now/2.1.0
|
||||
qs: registry.npmmirror.com/qs/6.5.3
|
||||
safe-buffer: registry.npmmirror.com/safe-buffer/5.2.1
|
||||
tough-cookie: registry.npmmirror.com/tough-cookie/2.5.0
|
||||
tunnel-agent: registry.npmmirror.com/tunnel-agent/0.6.0
|
||||
uuid: registry.npmmirror.com/uuid/3.4.0
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/resize-observer-polyfill/1.5.1:
|
||||
resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
|
||||
dev: false
|
||||
|
@ -7522,17 +7567,6 @@ packages:
|
|||
hasBin: true
|
||||
dev: true
|
||||
|
||||
registry.npmmirror.com/errno/0.1.8:
|
||||
resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz}
|
||||
name: errno
|
||||
version: 0.1.8
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
prr: 1.0.1
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
registry.npmmirror.com/error-ex/1.3.2:
|
||||
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz}
|
||||
name: error-ex
|
||||
|
@ -8663,16 +8697,6 @@ packages:
|
|||
engines: {node: '>= 4'}
|
||||
dev: true
|
||||
|
||||
registry.npmmirror.com/image-size/0.5.5:
|
||||
resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz}
|
||||
name: image-size
|
||||
version: 0.5.5
|
||||
engines: {node: '>=0.10.0'}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
registry.npmmirror.com/immutable/4.2.4:
|
||||
resolution: {integrity: sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/immutable/-/immutable-4.2.4.tgz}
|
||||
name: immutable
|
||||
|
@ -9410,14 +9434,14 @@ packages:
|
|||
engines: {node: '>=4'}
|
||||
hasBin: true
|
||||
optionalDependencies:
|
||||
errno: registry.npmmirror.com/errno/0.1.8
|
||||
graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10
|
||||
image-size: registry.npmmirror.com/image-size/0.5.5
|
||||
mime: registry.npmmirror.com/mime/1.6.0
|
||||
mkdirp: registry.npmmirror.com/mkdirp/0.5.6
|
||||
promise: registry.npmmirror.com/promise/7.3.1
|
||||
request: registry.npmmirror.com/request/2.88.2
|
||||
source-map: registry.npmmirror.com/source-map/0.6.1
|
||||
errno: 0.1.8
|
||||
graceful-fs: 4.2.10
|
||||
image-size: 0.5.5
|
||||
mime: 1.6.0
|
||||
mkdirp: 0.5.6
|
||||
promise: 7.3.1
|
||||
request: 2.88.2
|
||||
source-map: 0.6.1
|
||||
dev: true
|
||||
|
||||
registry.npmmirror.com/less/4.1.3:
|
||||
|
@ -9790,16 +9814,6 @@ packages:
|
|||
dependencies:
|
||||
mime-db: registry.npmmirror.com/mime-db/1.52.0
|
||||
|
||||
registry.npmmirror.com/mime/1.6.0:
|
||||
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz}
|
||||
name: mime
|
||||
version: 1.6.0
|
||||
engines: {node: '>=4'}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
registry.npmmirror.com/mime/2.6.0:
|
||||
resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz}
|
||||
name: mime
|
||||
|
@ -11129,16 +11143,6 @@ packages:
|
|||
engines: {node: '>=0.12'}
|
||||
dev: true
|
||||
|
||||
registry.npmmirror.com/promise/7.3.1:
|
||||
resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/promise/-/promise-7.3.1.tgz}
|
||||
name: promise
|
||||
version: 7.3.1
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
asap: registry.npmmirror.com/asap/2.0.6
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
registry.npmmirror.com/psl/1.9.0:
|
||||
resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz}
|
||||
name: psl
|
||||
|
@ -12125,6 +12129,7 @@ packages:
|
|||
tough-cookie: registry.npmmirror.com/tough-cookie/2.5.0
|
||||
tunnel-agent: registry.npmmirror.com/tunnel-agent/0.6.0
|
||||
uuid: registry.npmmirror.com/uuid/3.4.0
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/require-directory/2.1.1:
|
||||
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz}
|
||||
|
|
Loading…
Reference in New Issue
Block a user