knex cli๊ฐ ๊ตฌ์ฑ ๋ฐ ๋ง์ด๊ทธ๋ ์ด์
์ ์ํด es6์ ์ง์ํ๋ค๋ฉด ์ข์ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ํ๋๊ทธ ๋ค์ ์๊ฑฐ๋ ํ์ฌ ์์
๋๋ ํ ๋ฆฌ์ .babelrc
ํ์ผ์ด ์๋ ๊ฒฝ์ฐ์๋ง ๊ฐ๋ฅํฉ๋๋ค.
ํ์คํ ์ด๊ฒ์ ํ๋ฅญํ ๊ฒ์ ๋๋ค. ์ด์ ๋ํ PR์ ์๋ฝํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค.
์ฃ์กํฉ๋๋ค. ๊ทธ ์ด์ ๋๊ธ์ 1220ํธ์ ๋ํ ๊ฒ์ด์์ง๋ง ์ฌ๊ธฐ์ ๋๊ธ์ ์ค์๋ก ๋ฃ์์ต๋๋ค.
@rhys-vdw ๋ฌด์จ ์ผ์ด ํ์ํ์ง ์๊ณ ๊ณ์ญ๋๊น?
@rhys-vdw @jmfurlott . ๋๋ ์ด๊ฒ์ด ์ ๋ง ๋ฉ์ง ๊ธฐ๋ฅ์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ์ด๊ฒ์ ์ถ๊ตฌํ๋ ๋ฐ ๊ด์ฌ์ด ์์ต๋๋ค. ์ด๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด ํ์ํด์ผ ํ๋ ๊ตฌ์ฑ ์์๋ฅผ ์๋ ค์ค ์ ์๋ค๊ณ ์๊ฐํ์ญ๋๊น? ์ฝ๊ฐ์ ํต์ฐฐ๋ ฅ์ด ๋์์ด ๋ ๊ฒ์ ๋๋ค
CLI ์ง์
์ ์ require("babel-register")
๋ฅผ ์ถ๊ฐํ๋ฉด ํจ๊ณผ๊ฐ ์์ ์ ์์ต๋๋ค.
ํ์ธ๋จ - ์ด๋ฅผ ๋ด ์๋ ํ์ผ์ ์ถ๊ฐํ๊ณ ES2015๋ฅผ ์คํํ์ต๋๋ค! mocha๊ฐ CLI์์ ํ๋ ๊ฒ์ฒ๋ผ knexfile.js
์ compiler
๋ฅผ ์ค์ ํ๋ ์ต์
์ด ์์ด์ผ ํฉ๋๊น?
๋ง์นจ๋ด ๋ด ์ผ์ ์ป์์ต๋๋ค.
db.config.js
export default {
devDB: {
client: 'sqlite3',
connection: {
filename: './db.sqlite3',
},
pool: {
min: 1,
max: 1,
},
},
migrations: {
directory: './migrations',
tableName: '_migrations',
},
seeds: {
directory: './seeds/dev'
},
pool: {
min: 1,
max: 1,
}
}
knexfile.js
require('babel-register')
const config = require('./db.config').default // <- this -.-
module.exports = config
.babelrc
{
"env": {
"devDB": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}
}
๊ทธ๋ฌ๋ ./seeds์ ์์ง ์์ผ๋ฉด ์๋ ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
No seed files exist
๋ง์ด๊ทธ๋ ์ด์ ๋ ๋ง์ฐฌ๊ฐ์ง..
๋ ๋ค๋ฅธ ์ต์
์ babel-node
Knex๋ฅผ ์คํํ๋ ๊ฒ์
๋๋ค. babel-cli
์์ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
{
"scripts": {
"db:migrate:latest": "babel-node node_modules/.bin/knex migrate:latest"
}
}
์ฑ์ด ์ด๋ฏธ Babel์์ ์ฒ๋ฆฌ๋๋ ๋์ knexfile.js
๋ฅผ ๊ฐ์ ธ์์ require('babel-register')
์ต์
์ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋๋ ๊ฒฝ์ฐ ์ด ์์
์ ์ํํ ์ ์์ต๋๋ค.
@jeremejev ์ข์ ์๊ฐ...
{
"scripts": {
"knex": "babel-node node_modules/.bin/knex"
}
}
๋น์ ์์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค
npm run knex migrate:latest
๋ชจ๋ Knex ๋ช ๋ น์ ๋ํด ๋ณ๋์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค.
@olalonde ๋ค, ๊ทธ๊ฒ๋ ์๋ํฉ๋๋ค! ๋ฐ๋ ํ์ ์ ํํ ๋ฌธ๊ตฌ๋ฅผ ์์ด๋ฒ๋ฆฐ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ๋ช ์์ ์ธ "db: migrate:make " ๋ฐ "db: migrate:latest " ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค("make"? ๋๋ "make-migration"์ ๋๊น? ๋๋ "migrate: make"? ๋๋ "migrate:new"? ๋๋...) ๐
@olalonde ํ๋ฅญํ ์ ์์ ๋๋ค! ๊ทธ๋ฐ ๋ค์ ๋ค์๊ณผ ๊ฐ์ด npm ์คํฌ๋ฆฝํธ "๊ตฌ์ฑ"์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
{
"knex": "babel-node node_modules/.bin/knex",
"migrate": "npm run knex -- migrate:latest --env ",
}
์ด์ฉ๋ฉด ์ด๊ฒ์ด ๋์์ด ๋ ์๋ ์์ต๋๋ค: https://github.com/standard-things/esm
์ด์์ฒด์ : ์๋์ฐ
[email protected]
[email protected]
// migrations/contacts.js
export function up (knex) {
return knex.schema
.createTable('contacts', table => {
table.increments('id').primary()
table.string('firstName')
table.string('lastName')
table.string('emailAddress')
})
}
export function down(knex) {
return knex.schema
.dropTable('contacts')
}
$ npx knex migrate:latest
Using environment: development
migrations/contacts.js:1
(function (exports, require, module, __filename, __dirname) { export function up (knex) {
^^^^^^
SyntaxError: Unexpected token export
at Object.exports.runInThisContext (vm.js:73:16)
at Module._compile (module.js:543:28)
...
$ npx babel-node node_modules/.bin/knex migrate:latest
./node_modules/.bin/knex:2
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
^^^^^^^
SyntaxError: missing ) after argument list
at Object.exports.runInThisContext (vm.js:73:16)
at Module._compile (module.js:543:28)
...
$ npx babel-node node_modules/knex/bin/cli.js migrate:latest
Using environment: development
Batch 1 run: 1 migrations
migrations/contacts.js
@olalonde ์ ์ ์, npm run knex migrate:make
๋๋ npm run knex
๋ฅผ ์ถ๊ฐ ์ธ์์ ํจ๊ป ์๋ํ๋ฉด ์๋ฌด ๊ฒ๋ ํ์ํ์ง ์๊ณ ์ข
๋ฃ๋ฉ๋๋ค. npm run knex
์คํํ๋ฉด ์ ์์ ์ผ๋ก ์ฌ์ฉ๋์ด ํ์๋ฉ๋๋ค. npm ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด npm run knex -- migrate:make
์ ๊ฐ์ ์คํฌ๋ฆฝํธ ์ธ์ ์์ --
๋ฅผ ๋ฃ์ด์ผ ํ์ง๋ง ์ฌ์ ํ ์ถ๋ ฅ ์์ด ์ข
๋ฃ๋ฉ๋๋ค.
*nix์์ reify (๋น ๋ฅธ!) ์ฌ์ฉ(Windows์ ๋ณ์นญ ๋์์ด์ ๋ํด ์ ๋ชจ๋ฆ ๋๋ค. ์ฃ์กํฉ๋๋ค!)
/*
npm install --save-dev reify
echo '.reify-cache/' >> .gitignore
alias knex='node -r reify ./node_modules/.bin/knex
knex migrate:latest # โฆetc
*/
const table = 'foo';
export const up = knex => {
return knex.schema.createTable(table, t => {
t.increments();
// โฆetc
t.timestamps();
});
};
export const down = knex => knex.schema.dropTable(table);
// OR
// export function up (knex) {
// return knex.schema.createTable(table, t => {
// t.increments();
// // โฆetc
// t.timestamps();
// });
// }
// export function down (knex) {
// knex.schema.dropTable(table);
// }
๋ชจ๋ es6ifying knexfile.js ์๋๋ ์ถ์ ํ์ง๋ง module.exports๋ฅผ ์ฌ์ฉํ์ฌ ๋จ์ผ ์ด์์ผ๋ก ์ด ์ ์์ต๋๋ค.
๋ค์๊ณผ ํจ๊ป No knexfile found in this directory. Specify a path with --knexfile
๋ฅผ ๊ณ์ ๋ฐ์ผ์ญ์์ค.
// src/knexfile.js
import config from 'config'
export default {
debug: false,
settings: config.get('dbConfig'),
seeds: {
directory: './seeds/'
}
}
//package.json
"scripts": {
"knex": "babel-node node_modules/.bin/knex"
}
```
yarn knex migrate:make lol
````
์ด๋ค ํฌ์ธํฐ? ์์ ๋๋ ํ ๋ฆฌ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค(๋ด ์๊ฐ์๋) ๐ค
@haywirez ์ด๊ฒ์ด ์ด ํฐ์ผ์ ์ฃผ์ ์ ๊ด๋ จ์ด ์๋ค๊ณ ํ์ ํฉ๋๊น?.. ์ด์จ๋ , ๊ทธ๊ฒ์ด ์๊ตฌํ๋ ๊ฒ์ ์ ํํ๊ฒ ์ํํ๊ณ knexfile.js๋ฅผ ๊ฐ๋ฆฌํค๋ --knexfile์ ์ถ๊ฐํ์ญ์์ค.
@haywirez ' ๋ฌธ์ ๋ ESM interop์ ๋ํด export default { ... }
๊ฐ const file = require('/path/to/knexfile').default
์ฌ์ผ ํ๊ธฐ ๋๋ฌธ์ผ ์ ์์ต๋๋ค.
๋ํ knex cli์์ ์ฌ์ฉํ๋ Liftoff๋ esm
๋๋ babel-register
์ ๊ฐ์ ๊ฒ์ ์๊ตฌํ๋ --require
ํ๋๊ทธ๋ฅผ ํ์ฉํฉ๋๋ค. ๋ถํํ๋ ์ด ๋ช
๋ น์ Commander์ ๋ฑ๋ก๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ esm
์์ ์๊ตฌํ ํ knex cli๊ฐ ์ข
๋ฃ๋ฉ๋๋ค.
ยฑ |master ?:18 โ| โ npx knex --require esm seed:make admin_user
Requiring external module esm
error: unknown option `--require'
๋ชจ๋ ๋ช
๋ น์์ --require
๋ฅผ ํ์ฑํํ๊ณ knexfile
์ ๋ํ ์ํธ ์ด์ฉ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ํ๋ก์ ํธ๊ฐ PR์ ์ด๋ ค ์์ต๋๊น?
https://github.com/tgrisser/knex/issues/1232#issuecomment -411775132 ์์๋ ๋ณ์นญ ๊ฒฝ๋ก ์ด๋ฆ์ ๋ํ tsconfg-paths ๋ฅผ ๋ฑ๋กํ ์๋ ์์ต๋๋ค. ์ด๋ typescript๋ก ์๋๋ฅผ ๋ง๋ค ๋ ์ ์ฉํฉ๋๋ค. ts-node ๋ ๋ณ์นญ ๊ฒฝ๋ก๋ฅผ ์ง์ํ ๊ณํ ์ด ์๋๋ฏ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๊ธฐ ์ ์ ๋ณต์กํ ๋ณํ์ด ํ์ํ ์๋๋ฅผ ๋ง๋ค ๋ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. --require
ํ๋๊ทธ๋ฅผ ๋
ธ์ถํ๋ฉด ์ด ๋ฌธ์ ๋ฅผ ์ง์ ํด๊ฒฐํ ์ ์์ต๋๋ค.
๋๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด ๋ฌธ์ ์ ๋ถ๋ชํ ๊ฒฝ์ฐ ๋ค์์ ์ํํ์ฌ --require
ํ๋๊ทธ ์์ด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
node -r tsconfig-paths/register node_modules/.bin/knex seed:run
@olalonde ์ด๊ฒ์ ๋ชจ๋ ์ธ๊ธฐ ์๋ Node.js ๋ฒ์ ์ด
@kibertoad ๋ ธ๋๋ ์์ง ESModules๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
@mAAdhaTTah ๊ทธ๊ฒ์ ์ผ์ข ์ ์ผ์ข ์ ์์ต๋๋ค : https://nodejs.org/api/esm.html
@kibertoad ์, ํ์ง๋ง ๋งค์ฐ ์คํ์ ์ด๊ณ ๋ถ์์ ํ๋ฏ๋ก ์ ๋ขฐํ ์ ์์ต๋๋ค.
Windows์์ esm ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ค์์ ์๋ํ์ญ์์ค.
node -r esm node_modules/knex/bin/cli.js migrate:make migration_name
.
Linux ๋ฐ Mac์์๋ ๋ค์์ ์๋ํ์ญ์์ค.
node -r esm node_modules/.bin/knex migrate:make migration_name
๊ทธ๋์ ์ด ํฐ์ผ์์ ๋ด๊ฐ ๋ณธ ๋ง์ง๋ง ์ ๋ฐ์ดํธ๋ esm์ ํฌํจํ๊ณ ๋ฐ๋ ์ด ๋์์ต๋๋ค... ๊ทธ ์ดํ๋ก Babel๊ณผ ํจ๊ป ์๋ํ๋๋ก ๊ด๋ฆฌํ ์ฌ๋์ด ์์ต๋๊น? ๋๋ Babel์ ๋ํ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ๊ณผ babel-node ๋์ @babel/register๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ก์ด ๊ธฐ๋ณธ ์ค์ ์ด ํนํ ๊ถ๊ธํฉ๋๋ค.
@machineghost ์ต์ ๋ง์คํฐ๋ฅผ ์ฌ์ฉํด ๋ณผ ์ ์์ผ๋ฉฐ ๋ณํ์ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ๋ ์ ์๋ํ ์ ์์ต๋๋ค. ๋จ์ ์ ํ ์ฌํญ์ด ์์ผ๋ฉด ์๋ ค์ฃผ์ญ์์ค.
์ฌ์ ํ ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ด package.json
๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
"knex": "npx @babel/node node_modules/.bin/knex --knexfile=src/database/knexfile.js",
"migrate": "npm run knex migrate:latest",
// ...
"dependencies": {
// ...
"knex": "git://github.com/tgriesser/knex.git#master",
// ...
๋ด knexfile.js
๋ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
import { development } from './realKnexFile';
module.exports = {
development
};
๊ทธ๋ฌ๋ ์ฒซ ๋ฒ์งธ ์ค์ ๋์ ์ ์์ต๋๋ค. npm run migrate
์คํํ๋ฉด ๋ค์์ ์ป์ต๋๋ค.
knexfile.js:1
import { development } from './realKnexFile';
^
SyntaxError: Unexpected token {
at Module._compile (internal/modules/cjs/loader.js:760:23)
๋๋ผ์ด "esm" ๋ชจ๋ (Lodash ์ฐฝ์์๋ก๋ถํฐ)์ ๋ฐ๊ฒฌํ๋ฉด ๋ ์ด์ Babel์ด ํ์ํ์ง ์์ต๋๋ค. ์ค์ ๋ก ๋ชจ๋ Knex๊ฐ ES6 ๋ชจ๋์ ์ง์ํ๋ ๋ฐ ํ์ํ ๊ฒ์ ๋งค์ฐ ์ฝ๊ฒ --require esm
๋ฅผ node
๋ก ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ผ ๋ฟ์
๋๋ค.
knex
๋ช
๋ น์ค์์ -r
๋ฅผ ๊ฐ์ ธ์์ Node์ ์ ๋ฌํ ์ ์๋ค๋ฉด ์ด ํฐ์ผ๋ฟ๋ง ์๋๋ผ ๋๊ตฐ๊ฐ Knex๋ฅผ ์คํํ๊ธฐ ์ ์ Node ๋ชจ๋์ ์คํํด์ผ ํ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ ํด๊ฒฐํ ์ ์์ต๋๋ค.
-ํธ์งํ๋ค-
-r
์ธ์๊ฐ ์กด์ฌํ ๋๊น์ง ๋ค์์ ์ํํ์ฌ ๋ชจ๋ _required_ ๋ชจ๋( knexfile.js
์์ฒด๋ ์๋)์์ ES6 ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
require = require("esm")(module);
const importedContent = require('./someFile.js');
์ด๋ ๊ฒ ํ๋ฉด require
์์ฒด๊ฐ ES6 ๋ชจ๋์ ์ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค. ํ์ง๋ง knexfile.js
์ฌ์ ํ require
๋ฐ module.exports
๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. -r
์ต์
์ ์ฌ์ฉํ๋ฉด ํด๊ฒฐ๋ฉ๋๋ค.
๋๊ตฐ๊ฐ๊ฐ ์ฐพ๊ณ ์๋ ๊ฒฝ์ฐ esm ์ ์ฌ์ฉํ์ฌ knex๋ก ์์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ์ฒด ์๊ฐ ์์ต๋๋ค.
knexfile.js
const config = {
}
// Knex will fail if you use "exports default"
module.exports = config
ํจํค์ง.json
{
"scripts": {
"knex": "node -r esm node_modules/.bin/knex",
"db:migrate": "yarn knex migrate:latest"
}
}
ESM์ด ๋ ๋์คํ๋จ์ ๋ฐ๋ผ Knex๊ฐ Node >12์์ ์๋ํ ์ ์๋๋ก ์ฝ๊ฐ์ ๊ธฐ์ฌ๋ฅผ ํ ์ํฅ์ด ์์ต๋๋ค. ์ ๋ Node์์ ESM์ผ๋ก ์์ ํ ๊ฒฝํ์ด ์์ผ๋ฏ๋ก ์ํํ๊ฒ ์งํ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๋ถํํ๋ ์ ๋ฌด ์๊ฐ(์ ๋ฌด์ ๊ด๋ จ์ด ์์)์๋ ์์ ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ธ์ ์์ํ ์ ์์์ง ๋ง์๋๋ฆด ์ ์์ต๋๋ค. knex ์ฝ๋๋ฒ ์ด์ค์ ์ต์ํด์ง๋ ๋ฐ์๋ 1๋ถ์ด ๊ฑธ๋ฆด ๊ฒ์ ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์๊ฐ ์ ์ข
์์ฑ์ ๋ํด ๊ด์ฐฎ๋ค๋ฉด require('esm')
๋ฅผ ์ ์ค์ ์ถ๊ฐํ๋ ๊ฒ๋ง ํผ ๊ฐ๋จํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@jhechtf @machineghost ์ด๊ฒ์ ํ์ธํ์ญ์์ค:
https://github.com/knex/knex/pull/3616
https://github.com/knex/knex/pull/3639
https://github.com/knex/knex/pull/3638
๋ํ Liftoff ์ง์์ด ์์ ๋์์ผ๋ฏ๋ก ๋ ๋ง์ ๋ณ๊ฒฝ์ ์ํํ๊ธฐ ์ ์ ํ์ฌ ์๋ํ๋ ๊ฒ๊ณผ ์๋ํ์ง ์๋ ๊ฒ์ ํ์
ํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ํ
์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๋์์ด ๋ ๊ฒ์
๋๋ค.
์ฆ, ๋๊ตฐ๊ฐ๊ฐ ์ด ๋ชจ๋ ๊ฒ์ ์กฐ์ฌํ๊ณ ์ด๋ค ์์
(์๋ ๊ฒฝ์ฐ)์ด ์ฌ์ ํ ํ์ํ์ง ๊ฒฐ์ ํ๊ณ ๋ช ๊ฐ์ง ํ
์คํธ์ ๊ธฐ์ฌํ๋ค๋ฉด ํฐ ๋์์ด ๋ ๊ฒ์
๋๋ค.
์, ์ฌ๋ฌ๋ถ์ ์์ง ์์ ํ ๊ตฌ์์ง์ง ์์ ๊ณต์ Node ์๋ฃจ์ ์ ์ฌ์ฉํ์ต๋๋ค.
IMHO "esm" ๋ชจ๋ ์๋ฃจ์ ์ ํจ์ฌ ๊ฐ๋จํ๊ณ ํน๋ณํ ํ๋๊ทธ๊ฐ ํ์ํ์ง ์์ต๋๋ค. ๋ชจ๋ ๋ ธ๋ ํ๊ฒฝ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ES ๋ชจ๋์ ๋ชจ๋ ์ฌ๋์๊ฒ ์น์ํ๊ฒ ๋ง๋ญ๋๋ค(๋ด๊ฐ ๋งํ๋ฏ์ด ๋จ์ผ ์๊ตฌ ๋ผ์ธ์ด ์์ ๊ฐ๋ฅ์ฑ์ด ๋์) .
Lodash๋ฅผ ๋ง๋ ์ฌ๋์ด ๋ง๋ ๊ฒ์ ๋๋ค. JDD ๋ฐ์.
@machineghost https://github.com/knex/knex/pull/3639 ๋ babel์ ์ฌ์ฉํ๋ฏ๋ก ๋ค๋ฅธ ๋ฐฉ๋ฒ์
๋๋ค. esm
๋ชจ๋ ์ ๊ทผ ๋ฐฉ์์ ์๋ํ๋ ์ฌ๋์ ๋ณด์์ง๋ง ์ด๋ค ์ด์ ์์์ธ์ง ์ง๊ธ์ PR์ ์ฐพ์ ์ ์์ต๋๋ค.
๊ธ์, FWIW ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ์ฌ ๊ฐ์ฅ ๋น ๋ฅธ ์คํ ์ค๋ฒํ๋ก ํฌ์ธํธ ์์ค์ ๋๋ค ;)
๋๋ ๊ทธ๊ฒ์ ๋ฐ๊ฒฌํ๊ณ ์ฌ๊ธฐ์ ๋ค๋ฅธ ์ฌ๋์๊ฒ ์ถ์ฒ : https://stackoverflow.com/questions/47277887/node-experimental-modules-requested-module-does-not-provide-an-export-named/54302557#54302557
๊ทธ๋ฆฌ๊ณ ์ง๊ธ์ ESM์ ์ํ ์ ๋ง ํ๋ฅญํ(์ง๊ธ ๋น์ฅ ์ ์ต๊ณ ์ ) ์๋ฃจ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ฉฐ์น ๋ง๋ค ์๋ก์ด ์ฐฌ์ฑ ํฌํ๋ฅผ ๋ฐ์ต๋๋ค.
@machineghost ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๋์ ์ด ์ผ๋ง๋ ๊ฑฐ์ฌ
๋๋ ์ด๊ฒ์ด "์๋ฌด๋ฐ ํจ๊ณผ๊ฐ ์์ด์ผ ํ์ง๋ง ๋ชจ๋ ๊ฒ์ ์ํฅ์ ๋ฏธ์น๊ธฐ ๋๋ฌธ์ ๋น์ ์ด ํ์คํ ํ ์คํธํด์ผ ํ๋" ๊ฑฐ๋ ์ค ํ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ด๋ถ๋ฅผ ์ดํด ๋ณด์ง๋ ์์์ง๋ง ์ปค๋ฎค๋ํฐ์์ ์ด ํ๋ก์ ํธ์ ํ๋กํ์ ๊ฐ์ํ ๋ ๋๊ตฐ๊ฐ ๋ณด๋ฉด ์ํ์ ๋ํด ๋ฌด๊ฒ๋ฅผ ํจ์ฌ ๋ ๋ง์ ์ ๋ณด์ ์ ๊ฐํ ์๊ฒฌ์ผ๋ก?) :crossed_fingers:
@machineghost https://github.com/knex/knex/pull/3616 ์์ ์๋ ๊ตฌํ์ ์ํฅ์ ํ์ธํ ์ ์์ต๋๋ค. esm
๊ฐ ๋์
๋๋ฉด ์๋ง๋ ์ ๊ฑฐํ๊ฑฐ๋ ๊ต์ฒดํด์ผ ํ ๊ฒ์
๋๋ค.
๋๋ ๋์ญํญ ATM์ด ์์ง๋ง ์๊ฐ์ด ๋๋ฉด ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์๋ง๋ @jhechtf ๊ฐ ๋ ๋นจ๋ฆฌ ํ ์ โโ์์๊น์?
์, ์ฌ๋ฌ๋ถ์ ์์ง ์์ ํ ๊ตฌ์์ง์ง ์์ ๊ณต์ Node ์๋ฃจ์ ์ ์ฌ์ฉํ์ต๋๋ค.
@machineghost : ํ ... --esm
ํ๋๊ทธ๊ฐ ์ค์ ๋ก ์ธ๊ธํ esm
๋ชจ๋์ ์ฌ์ฉํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
https://github.com/knex/knex/blob/0f523db957138cc0423723c699c9ce52db5feb14/bin/cli.js#L52 -L55
๊ด๋ จ ์ฐธ๊ณ ์ฌํญ: Liftoff
๊ฐ์ ์ฌํญ์ด ๋ณํฉ๋ ํ --require
ํ๋๊ทธ๋ฅผ ์์ ํด์ผ ํ๋ค๋ ์ฌ์ค์ ์๋ ค์ฃผ์
จ์ต๋๋ค. ์ง๊ธ ํ๋ฌ ๊ฐ์ผ ํ๋๋ฐ...
์, ์ฃ์กํฉ๋๋ค! ๋๋ฌด ๋นจ๋ฆฌ ์ค์บํ๊ณ " node ${KNEX} --esm
"๋ฅผ ๋ณด๊ณ ๊ฑฐ๊ธฐ์ ์๋ ๋ณ์๋ฅผ ์ดํด๋ณด๊ณ Node์ arg๋ฅผ ์ง์ ์ ๋ฌํ์ฌ Node์ ๋ฒ์ ์ ์ฌ์ฉํ๋๋ก ์ง์ํ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
์ด๊ฒ์ ์ด๋ฏธ ํด๊ฒฐ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฌ๋ฉฐ ๋ฌธ์ ์ค๋ ๋์์ ๋ช ํํ์ง ์์์ต๋๋ค. ์ํ์ด :+1:
๋ต! ์ด PR์์ @D10221 ์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ฒ ๊ฐ์ต๋๋ค.
https://github.com/knex/knex/pull/3616
๋ฐ๋ผ์ ๊ทธ๋ค์ ํฌ๋ ๋ง์ ๋ฐ์ ์๊ฒฉ์ด ์์ต๋๋ค ๐
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@jeremejev ์ข์ ์๊ฐ...
๋น์ ์์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค
๋ชจ๋ Knex ๋ช ๋ น์ ๋ํด ๋ณ๋์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค.