๋ฒ๊ทธ ์ค๋ช
์ต์ CJS ํจํค์ง๊ฐ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค (9.3.3). 9.2.1์ ์ฌ์ฉํ๋ฉด ์๋ํฉ๋๋ค. codesandbox ๋๋ ์๋ ๋ก๊ทธ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
[ error ] ./node_modules/react-dnd-cjs/lib/common/DndContext.js
Module not found: Can't resolve 'dnd-core' in '/mnt/c/dev/foobar/app/node_modules/react-dnd-cjs/lib/common'
{ Error: Cannot find module 'dnd-core'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
์์
+1, ๋ด ์๋๋ฆฌ์ค์์ webpack
๋น๋๋ ์ ์๋ํ์ง๋ง mocha --require @babel/register
(์ฆ, ๋
ธ๋ ํ๊ฒฝ)์ ๋์ผํ ๊ฒฐํจ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ํ /dist/cjs
[email protected]
์์ ์์ฑ ๋ ๋ฐฐํฌ ํ์ ํธ๋ฆฌ๊ฐ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. babel-plugin-module-resolver
๋ฅผ ํตํด ๋ฐ๋ฒจ ๊ตฌ์ฑ์์ ์ด๊ฒ์ ํดํนํ๋ ค๊ณ ์๋ํ์ง๋ง ์ฑ๊ณตํ์ง ๋ชปํ์ต๋๋ค.
[
"babel-plugin-module-resolver",
{
alias: {
"^react-dnd$": "\\0/dist/cjs",
"^react-dnd-.*$": "\\0/dist/cjs",
"^dnd-.*$": "\\0/dist/cjs"
}
}
]
๊ฐ๋จํ ๋งํด์,์ด ์ฌ ์์ฑ ๋ฒจ๋ก์ฐ๋ webpack
( [email protected]
) ๋ฐ mocha
( [email protected]
)์์๋ ์ ํ๋ฆฌ์ผ์ด์
์์ค ์ฝ๋ ๋ณ๊ฒฝ์์ด ์๋ํฉ๋๋ค.
[
"babel-plugin-module-resolver",
{
alias: {
"^react-dnd$": "\\0-cjs"
}
}
]
์ด ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ต๋๋ค.
๋๋ ์ด๊ฑธ ๋ง๋ฌ์ด
@martinschayna ๋ ๋ฒ์งธ
/node_modules/dnd-core/dist/esm/index.js:1
(function (exports, require, module, __filename, __dirname) { export * from './interfaces';
๋ํ 9.3.3์ด ๋ชจ๋ ํจํค์ง์ ๋ํด ๊ฒ์๋์ง ์์ ๊ฒ์ ํ์ธํ์ต๋๋ค. @darthtrevino ์กฐ๊ธ ์ด์ํด
์ด ๋ถ๋ถ์ ์ข ๋ ํํค ์ณค์ต๋๋ค.
.d.ts๊ฐ ํจ์น๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค (์ด ์์ ์์ scripts/execute_cjs_replacements.js
๊ท์น์ด ์ข์ ๋ณด์ด๋ ์ด์ ๊ฐ ํ์คํ์ง ์์).
process module requires in /Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd
*.d.ts require replacement [ { file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/common/DndContext.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/common/DndProvider.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/common/DragPreviewImage.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/common/DragSourceMonitorImpl.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/common/DropTargetMonitorImpl.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/common/index.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/common/registration.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/common/SourceConnector.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/common/TargetConnector.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/common/wrapConnectorHooks.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/decorators/createSourceFactory.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/decorators/createTargetFactory.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/decorators/decorateHandler.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/decorators/disposables.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/decorators/DragLayer.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/decorators/DragSource.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/decorators/DropTarget.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/decorators/index.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/decorators/interfaces.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/decorators/utils.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/hooks/index.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/hooks/internal/drag.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/hooks/internal/drop.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/hooks/internal/useCollector.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/hooks/internal/useDragDropManager.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/hooks/internal/useMonitorOutput.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/hooks/useDrag.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/hooks/useDragLayer.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/hooks/useDrop.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/index.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/interfaces/connectors.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/interfaces/hooksApi.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/interfaces/index.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/interfaces/monitors.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/interfaces/options.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/utils/cloneWithRef.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/utils/isRef.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/utils/isValidType.js',
hasChanged: false },
{ file:
'/Users/cautexier/projects/react-dnd/packages/alternative_builds/cjs/react-dnd/lib/utils/js_utils.js',
hasChanged: false } ]
js from replacement []
*.d.ts from from replacement []
*.d.ts from import replacement []
js ํ์ผ์ ๊ฐ์ ธ ์ค๊ธฐ๋ฅผ ๋์ฒดํ๋ scripts / execute_cjs_replacements.js์ ๋๋ฝ ๋ ๊ท์น์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ DndContext.js๋ node_modules / react-dnd-cjs / lib / common / DndContext.js : 11์ dnd-core์์ ๊ฐ์ ธ ์ค๊ธฐ๋ฅผ ์๋ํ์ง ์์ต๋๋ค.
let jsFromReplaceSpec = {
files: `${file}/lib/**/*.js`,
from: esmLibs.map(esmLib => new RegExp(`from '${esmLib}'`, 'g')),
to: esmLibs.map(esmLib => `from '${esmLib}-cjs'`),
}
replace.sync(jsFromReplaceSpec)
์ ๋ฆ๋ฐ์ด, ๋ฆด๋ฆฌ์ค ํ๋ก์ธ์ค๋ฅผ ์์ ํ๊ฒ ์ต๋๋ค.
๋ฐฉ๊ธ abolute ๊ฒฝ๋ก๋ฅผ ์ปค๋ฐํ์ต๋๋ค : https://github.com/react-dnd/react-dnd/search?q=christrevino&unscoped_q=christrevino
yarn build
yarn run v1.15.2
$ tsc
error TS6053: File '/Users/christrevino/Workspace/oss/react-dnd/packages/core/react-dnd/src/index.ts' not found.
Found 1 error.
error Command failed with exit code 2.
๋ด ์ ์ฅ์๋ฅผ ์ ๋ฆฌํ๊ณ tsconfig์๋ ๋ถ๊ตฌํ๊ณ ๋น๋๋ฅผ ์คํํ ์์์์ต๋๋ค.
์์ฌ ๋งํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ์ ์ํ ํ ์ ์์ง๋ง ๊ฒ์ ๋ 9.3.5 ํจํค์ง์ ์ฌ์ ํ ์ฌ๋ฐ๋ฅธ ํ์ผ์ด ํฌํจ๋์ด ์์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
CJS ๋น๋๋ ํญ์ ๋์ ์ผ๋ก ์์ฑ๋๋๋ก ์ค๊ณ๋์์ผ๋ฏ๋ก ์ ๋ ๊ฒฝ๋ก์ ๋ํด ๋๋ฌด ๊ฑฑ์ ํ์ง ์์ต๋๋ค. yarn install
์์๋ ์ด์จ๋ ๋ค์ ์์ฑ๋์ด์ผํฉ๋๋ค. ๊ทธ๋ค์ด .gitignore์์๋ ์ ์ผํ ์ด์ ๋ Lerna๊ฐ ๋ฐ๊ฒฌ ํ ์์๋ ๋ฌธ์ ๋๋ฌธ์ด์์ต๋๋ค.
@sandorfr ๋น๋๊ฐ ์๋ฃ๋ ํ ์ด๋ค ์ข ๋ฅ์ ์ค๋ฅ๊ฐ ํ์๋ฉ๋๊น?
CJS์์ ํ์ดํ ํ๋๊ฐ ๋๋ฝ ๋ ๊ฒ์ ํ์ธํ์ต๋๋ค. ์ด์ ๋ํ ๋ค๋ฅธ ๋ฆด๋ฆฌ์ค๋ฅผ ์ํํ๊ฒ ์ต๋๋ค.
์์ ์ค๋ฅ๋ https://github.com/react-dnd/react-dnd/issues/1468#issuecomment -518488026์ด์ง๋ง ๋ด ์ ์ฅ์๋ฅผ ์ ๋ฆฌํ์ฌ ํด๊ฒฐ๋์์ต๋๋ค. ๋๋ ์ค ์ค์น๋ฅผ ํ ๋ค์ ๊ทธ๊ฒ์ ๊ณ ์ณค๋ค ๊ณ ์๊ฐํฉ๋๋ค.
์ ์ผํ ๋จ์ ๋ฌธ์ ๋ ๊ฒ์ ํ 9.3.5์ ํ๋ฅด๋ณผ์ ๊ฒ์ฌ ํ ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ๋์ด ์์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ฌ์ ํ ์๋ชป๋ ๊ฐ์ ธ ์ค๊ธฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๋ก์ปฌ์์ ๋น๋ ํ ํจํค์ง๋ฅผ ๋ณด๋ฉด ๊ด์ฐฎ์ต๋๋ค.
create_packages ์คํฌ๋ฆฝํธ์์ ์ ๋ URL์ ์ ๊ฑฐํ๊ณ ์์ต๋๋ค. 1 ๋ถ ์์ ์๋ํฉ๋๋ค.
@sandorfr CJS ํจํค์ง๋ ์ด์ 9.3.6์ ๊ฒ์๋ฉ๋๋ค.
ํ , ๊ฒ์๊ฐ ํธ๋ฆฌ๊ฑฐ ๋ ๋ ๋์ฒด ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๊ณ ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
npm ์ค์น์ ๋ด์ฉ์ ๊ด์ฐฎ์ ๋ณด์ ๋๋ค. ๋ญ๊ฐ ์๋ชป ์ฝ์ ๊ฒ ๊ฐ์ต๋๋ค.
์ข์ ์ง๊ธ ์๋ํด๋ณด์ญ์์ค :)
์ฌ์ ํ ์๋ชป๋ ํ์ผ์
๋๋ค ...
Lerna๊ฐ ์ ๋งํฌ ๋ ๋ญ๊ฐ๋ฅผ ์ค์ ํด์ผํฉ๋๋ค. ์ ์๋ง ๊ธฐ๋ค๋ ค์ฃผ์ธ์.
ํธ์ง-๋ค, npm์ ๋ค๋ฅธ ๋๋ ํ ๋ฆฌ์ ์ค์นํ๋ฉด์ด ๋ฌธ์ ๊ฐ ์ฌํ๋ฉ๋๋ค. ๋ค๋ฅธ ๊ฒ์ ์๋ผ๋ด๊ฒ ์ต๋๋ค.
์ํด ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ฌ๋ฌ ํจ์น๋ฅผ ์ฐ์ํด์ ์๋ผ์ ์ฃ์กํฉ๋๋ค. ๊ทธ๊ฒ๋ค์ ์๋ง๋ ํ๋ฆฌ ๋ฆด๋ฆฌ์ฆ ์์ ๊ฒ์ ๋๋ค.
์ํด ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ฌ๋ฌ ํจ์น๋ฅผ ์ฐ์ํด์ ์๋ผ์ ์ฃ์กํฉ๋๋ค. ๊ทธ๊ฒ๋ค์ ์๋ง๋ ํ๋ฆฌ ๋ฆด๋ฆฌ์ฆ ์์ ๊ฒ์ ๋๋ค.
๋ฐ์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค :) ์ด๋ฐ ์ข ๋ฅ์ ๋ฌธ์ ๊ฐ ์ผ๋ง๋ ๊ณ ํต ์ค๋ฌ์ด์ง ์๊ณ ์์ต๋๋ค. ๊ทธ๋์ ๊ณต๊ฐํ ์ ์์ต๋๋ค :)
์ฌ๋ฐ๋ฅธ ๋ฒ์ ์ 9.3.8์ ๋๊น?
9.3.9 ๋ฐ๋ผ๊ฑด๋-9.3.8์๋ lib / ๋๋ ํ ๋ฆฌ๊ฐ ์์ต๋๋ค. prepublishOnly ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ ๋ฐฉ์์ ๋ฌธ์ ๊ฐ ์๊ฒผ์ต๋๋ค.
9.3.9๋ ๋ด ์ชฝ์์ ์ข์ ๋ณด์ธ๋ค
@martinschayna ๋ ๋ฒ์งธ
@sandorfr ์, [email protected]
๋ฐ [email protected]
์ด์ ๋ฒ์ ์ด ์ค์น๋ ์ํ์์ ์๋ํฉ๋๋ค. ๋๋ ์์ง ์ต์ ๋ฒ์ ์ผ๋ก ์๋ํ์ง ์์์ง๋ง babel config์์ ์ถ์
ํ ํดํน์ ์ ๊ฑฐํ๊ธฐ๋ฅผ ๊ณ ๋ํ๊ณ ์์ต๋๋ค : slightly_smiling_face :
9.3.9๋ ๋ด ์ชฝ์์ ์ข์ ๋ณด์ธ๋ค
์ข์ ๋ณด์ธ๋ค ๐. CI๊ฐ ์๋ฃ๋๋ฉด ํ์คํ ์ ๊ฒ์ ๋๋ค :)
๋๋ 20 ์ผ๊น์ง ๋๊ฐ๊ณ ์์ต๋๋ค. ๋ฌธ์ ๊ฐ ์ง์๋๋ฉด ์ธ์ ๋ ์ง ๋ค์ ์ด์ด๋ณด์ธ์. ๊ฐ์ฌ!
npm์ ๊ฒ์ ํ ์ ์์ต๋๊น? ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์ ๋ฒ์ ์ ์ค๋๋ถํฐ 9.3.4์ ๋๋ค. https://www.npmjs.com/package/react-dnd
npm์ ๊ฒ์ ํ ์ ์์ต๋๊น? ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์ ๋ฒ์ ์ ์ค๋๋ถํฐ 9.3.4์ ๋๋ค. https://www.npmjs.com/package/react-dnd
๋ฌธ์ ์ ์์ ์ฌํญ์ cjs ๋ฆด๋ฆฌ์ค์๋ง ์ ์ฉ / ์ํฅ์์ค๋๋ค : https://www.npmjs.com/package/react-dnd-cjs
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ 20 ์ผ๊น์ง ๋๊ฐ๊ณ ์์ต๋๋ค. ๋ฌธ์ ๊ฐ ์ง์๋๋ฉด ์ธ์ ๋ ์ง ๋ค์ ์ด์ด๋ณด์ธ์. ๊ฐ์ฌ!