[JS]Knex와 Webpack을 같이 쓰면서 발생한 오류 처리

1
2
ERROR in './node_modules/knex/lib/dialects/mssql/index.js'
Module not found: Error : Can't resolve 'mssql/lib/base'

프로젝트에 웹팩을 도입하여 사용중, knex 라이브러리를 넣고 나서

웹팩으로 빌드시 해당 에러가 나와서 빌드에 실패 했습니다.

해당 오류를 검색 하였는데,

역시나 깃허브 이슈가 있었고(감사합니다),
webpack의 config에 아래의 내용을 추가 하였습니다.

1
2
3
externals: {
knex: 'commonjs knex'
}

해당 작업 후 빌드는 성공했지만,

노드 서버에서 실행시 knex 모듈을 찾을 수 없다는 오류가 나왔습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"errorMessage": "Cannot find module 'knex'",
"errorType": "Error",
"stackTrace": [
"Function.Module._load (module.js:474:25)",
"Module.require (module.js:596:17)",
"require (internal/module.js:11:18)",
"Object.defineProperty.value (/var/task/main.js:1604:18)",
"__webpack_require__ (/var/task/main.js:20:30)",
"Object.<anonymous> (/var/task/main.js:1564:14)",
"__webpack_require__ (/var/task/main.js:20:30)",
"Object.defineProperty.value (/var/task/main.js:1442:20)",
"__webpack_require__ (/var/task/main.js:20:30)"
]
}

계속해서 구글링하던중, 다른분의 도움으로 해당 이슈 코멘트를 찾았습니다.

해당 코드를 참고하여 mysql2 라이브러리를 사용했기때문에 아래와 같은 코드를 추가 하였습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
plugins: [
new webpack.NormalModuleReplacementPlugin(/\.\.migrate/, '../util/noop.js'),
new webpack.NormalModuleReplacementPlugin(/\.\.seed/, '../util/noop.js'),
new webpack.IgnorePlugin(/mariasql/, /knex/),
new webpack.IgnorePlugin(/mysql/, /knex/),
new webpack.IgnorePlugin(/mssql/, /knex/),
new webpack.IgnorePlugin(/oracle/, /knex/),
new webpack.IgnorePlugin(/oracledb/, /knex/),
new webpack.IgnorePlugin(/postgres/, /knex/),
new webpack.IgnorePlugin(/redshift/, /knex/),
new webpack.IgnorePlugin(/pg-query-stream/, /knex/),
new webpack.IgnorePlugin(/sqlite3/, /knex/),
new webpack.IgnorePlugin(/strong-oracle/, /knex/),
new webpack.IgnorePlugin(/pg-native/, /pg/)
]
}

빌드는 성공 했으나 정상 동작하지 않아 확인 해보니 /node_modules/knex/lib/mysql2/index.js 해당 파일에

/node_modules/knex/lib/mysql2/index.js

이러한 코드가 있어서 결국 mysql2를 쓰더라도 mysql 라이브러리가 필요하였습니다.

굳이 mysql2 모듈을 고집 할 필요가 없을것 같아, mysql 모듈로 변경하고,

new webpack.IgnorePlugin(/mysql/, /knex/)new webpack.IgnorePlugin(/mysql2/, /knex/), 로 변경하니
빌드도 성공하였으며, 정상 동작 하였습니다.

더 좋은 방법이 있을거 같은데 아쉽게도 제가 찾은 방법은 이것 밖에 없었습니다.

좋은 해결 방안 있으면 댓글로 공유 부탁 드리겠습니다.

[JS]Knex와 Webpack을 같이 쓰면서 발생한 오류 처리

https://blog.hodory.dev/2019/04/18/knex-with-webpack/

Author

Hodory

Posted on

2019-04-18

Updated on

2022-08-11

Licensed under

댓글