diff --git a/back/loaders/app.ts b/back/loaders/app.ts index 0210cfe7..20c38e27 100644 --- a/back/loaders/app.ts +++ b/back/loaders/app.ts @@ -3,6 +3,7 @@ import dependencyInjectorLoader from './dependencyInjector'; import Logger from './logger'; import initData from './initData'; import { Application } from 'express'; +import linkDeps from './deps'; export default async ({ expressApp }: { expressApp: Application }) => { await dependencyInjectorLoader({ @@ -15,4 +16,7 @@ export default async ({ expressApp }: { expressApp: Application }) => { await initData(); Logger.info('✌️ init data loaded'); + + await linkDeps(); + Logger.info('✌️ link deps'); }; diff --git a/back/loaders/deps.ts b/back/loaders/deps.ts new file mode 100644 index 00000000..2a77fc2e --- /dev/null +++ b/back/loaders/deps.ts @@ -0,0 +1,30 @@ +import path from 'path'; +import fs from 'fs'; +import chokidar from 'chokidar'; + +function linkToNodeModule(src: string, dst?: string) { + const target = path.join(__dirname, 'node_modules', dst || src); + const source = path.join(__dirname, src); + + fs.lstat(target, (err, stat) => { + if (!stat) { + fs.symlink(source, target, 'dir', (err) => { + if (err) throw err; + }); + } + }); +} + +export default async (src: string = 'deps') => { + linkToNodeModule(src); + + const source = path.join(__dirname, src); + const watcher = chokidar.watch(source, { + ignored: /(^|[\/\\])\../, // ignore dotfiles + persistent: true, + }); + + watcher + .on('add', (path) => linkToNodeModule(src)) + .on('change', (path) => linkToNodeModule(src)); +}; diff --git a/package.json b/package.json index 386b1e19..d8586cae 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "@sentry/tracing": "^6.14.0", "body-parser": "^1.19.0", "celebrate": "^13.0.3", + "chokidar": "^3.5.2", "cors": "^2.8.5", "cron-parser": "^3.5.0", "dotenv": "^8.2.0", diff --git a/yarn.lock b/yarn.lock index 0332fb97..84b74cc0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2889,7 +2889,7 @@ chokidar@3.5.1: optionalDependencies: fsevents "~2.3.1" -chokidar@^3.2.2: +chokidar@^3.2.2, chokidar@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==