인프런 커뮤니티 질문&답변

uoon lee님의 프로필 이미지

작성한 질문수

풀스택 리액트 토이프로젝트 - REST, GraphQL (for FE개발자)

express 서버 및 json database 만들기

yarn run server 에러 발생

해결된 질문

21.11.29 18:35 작성

·

604

0

yarn 워크스페이스 구성하고 필요한 패키지를 설치했는데
nodemon ./src/index.js

위 커맨드 실행시 에러가 발생합니다. yarn 2 버전을 사용하고 있는데 버전 1로 다운그레이드 해도 동일한 현상이 발생하네요.. 의존성 관리에 문제가 있는 것 같은데 해결책이 있을까요? 폴더 구조는 강의와 동일합니다.

// package.json

{
"version": "1.0.0",
"name": "node-graphql",
"private": true,
"workspaces": [
"client",
"server"
],
"scripts": {
"frontend": "yarn workspace client start",
"server": "yarn workspace server start"
}
}

// server/package.json

{
"version": "1.0.0",
"name": "server",
"main": "index.js",
"type": "module",
"license": "MIT",
"dependencies": {
"cors": "^2.8.5",
"express": "^4.17.1",
"uuid": "^8.3.2"
},
"devDependencies": {
"nodemon": "^2.0.15"
},
"scripts": {
"start": "nodemon ./src/index.js"
}
}

 

에러 내용

(node:76305) ExperimentalWarning: The ESM module loader is experimental. internal/modules/run_main.js:54 internalBinding('errors').triggerUncaughtException( ^ Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'express' imported from /Users/iyuun/WebstormProjects/node-graphql/server/src/index.js Did you mean to import express-npm-4.17.1-6815ee6bf9-c4b470d623.zip/node_modules/express/index.js?

server 폴더에서 express 깔았는데도 그러네요..

답변 2

2

uoon lee님의 프로필 이미지
uoon lee
질문자

2021. 11. 29. 19:36

yarn pnp 사용했을 때 나타나는 에러인 것 같습니다. pnp module 시스템에서 esm을 지원하지 않아서 package.json에 "type": "module"을 추가해도 원하는 패키지를 찾을 수가 없네요.

관련 이슈: https://github.com/yarnpkg/berry/issues/638

.yarnrc.yml 파일에 

nodeLinker: node-modules

이렇게 설정해줘서 해결하긴 했는데 강의에는 관련 내용이 없는 걸 보니 pnp 사용을 안해서 그런 건지 궁금하네요.

정재남님의 프로필 이미지
정재남
지식공유자

2021. 11. 29. 19:40

네, yarn 1.0 베이스에요. yarn berry 사용시에는 그런 문제가 있군요..

시시각각 변하는 라이브러리가 많아 일일이 대응하기가 힘든 측면이 있습니다.

양해 부탁드리고, 답변주신 내용은 강의노트에 추가해 놓겠습니다. 감사합니다!

0

정재남님의 프로필 이미지
정재남
지식공유자

2021. 11. 29. 19:23

삭제된 글입니다

uoon lee님의 프로필 이미지
uoon lee
질문자

2021. 11. 29. 19:24

server/src/index.js 입니다!

import express from 'express';
import cors from 'cors';
import messagesRoute from './routes/messages.js'
import usersRoute from './routes/users.js'

const app = express();
app.use(express.urlencoded({ extended: true }))
app.use(express.json());

app.use(cors({
origin: 'http://localhost:3000',
credentials: true
}))

const routes = [...messagesRoute, ...usersRoute];

routes.forEach(({ method, route, handler}) => {
app[method](route, handler)
})

app.listen(8000, () => {
console.log('server listening on 8000..')
})
uoon lee님의 프로필 이미지

작성한 질문수

질문하기