<p>gatsby-node.jsλŠ” ES6 κ°€μ Έμ˜€κΈ°λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.</p>

에 λ§Œλ“  2018λ…„ 09μ›” 02일  Β·  39μ½”λ©˜νŠΈ  Β·  좜처: gatsbyjs/gatsby

μ„€λͺ…

gatsby-node.js 은 ES6 μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μž¬ν˜„ 단계

gatsby-node.js :

import myOnCreatePage from './gatsby/node/onCreatePage';
export const onCreatePage = myOnCreatePage;

μ˜ˆμƒ κ²°κ³Ό

gatsby-node.js λŠ” νŠΈλžœμŠ€νŒŒμΌλ˜μ–΄μ•Ό ν•˜λ©° gatsby-ssr.js λ˜λŠ” gatsby-browser.js 와 같은 ES6을 ν—ˆμš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ‹€μ œ κ²°κ³Ό

였λ₯˜

Error: <root>/gatsby-node.js:1
SyntaxError: Unexpected token import

ν™˜κ²½

  System:
    OS: macOS High Sierra 10.13.6
    CPU: x64 Intel(R) Core(TM) i7-6567U CPU @ 3.30GHz
    Shell: 3.2.57 - /bin/bash
  Binaries:
    Node: 8.10.0 - ~/.nvm/versions/node/v8.10.0/bin/node
    Yarn: 1.9.4 - /usr/local/bin/yarn
    npm: 6.4.1 - ~/.nvm/versions/node/v8.10.0/bin/npm
  Browsers:
    Chrome: 68.0.3440.106
    Firefox: 61.0.2
    Safari: 11.1.2
  npmPackages:
    gatsby: next => 2.0.0-rc.5 
    gatsby-source-filesystem: next => 2.0.1-rc.1 
  npmGlobalPackages:
    gatsby-cli: 1.1.58

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚˜λŠ” 이것을 μœ„ν•΄ esm 을 μ‚¬μš©ν•˜κ³  μ§€κΈˆκΉŒμ§€ μž‘λ™ν•©λ‹ˆλ‹€. λ‚΄κ°€ ν•œ 일은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. esm ( npm i esm )
  2. 루트 폴더( gatsby-node.js κ°€ ν¬ν•¨λœ λ™μΌν•œ 폴더)에 gatsby-node.esm.js λΌλŠ” νŒŒμΌμ„ λ§Œλ“­λ‹ˆλ‹€.
  3. λͺ¨λ“  μ½”λ“œλ₯Ό gatsby-node.js μ—μ„œ gatsby-node.esm.js
  4. gatsby-node.js λͺ¨λ“  μ½”λ“œλ₯Ό λ‹€μŒμœΌλ‘œ λ°”κΏ‰λ‹ˆλ‹€.
    javascript require = require('esm')(module) module.exports = require('./gatsby-node.esm.js')
  5. μ‚¬μš© import μ—μ„œ gatsby-node.esm.js 당신이 μ›ν•˜λŠ” λͺ¨λ“  πŸŽ‰

@KyleAMathews 이런 μ‹μœΌλ‘œν•˜λŠ” 것이 μœ„ν—˜ν•œκ°€μš”? μ•ˆμ „ν•˜λ‹€λ©΄ λ¬Έμ„œμ— μΆ”κ°€ν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. :)

λͺ¨λ“  39 λŒ“κΈ€

이 νŒŒμΌμ€ node.js에 μ˜ν•΄ μ‹€ν–‰λ˜λ―€λ‘œ μ‚¬μš© 쀑인 λ…Έλ“œ 버전이 μ§€μ›ν•˜λŠ” λͺ¨λ“  버전을 μ§€μ›ν•©λ‹ˆλ‹€. λ…Έλ“œμ—μ„œ Es6 λͺ¨λ“ˆ 지원은 μ—¬μ „νžˆ ​​wip https://medium.com/@giltayar/native -es-modules-in-nodejs-status-and-future-directions-part-i-ee5ea3001f71μž…λ‹ˆλ‹€.

λ‚˜λŠ” λ˜ν•œ 이것을 μ‹€ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. gatsby-mdx/mdx-renderer 을 μ‚¬μš©ν•΄μ•Ό ν•˜κ³  require μ‚¬μš©ν•˜λ”λΌλ„ ν•„μš”ν•œ 파일 μžμ²΄λŠ” ES6 λͺ¨λ“ˆ ꡬ문을 μ‚¬μš©ν•˜κ³  μ€‘λ‹¨λ©λ‹ˆλ‹€. gatsby-node.js κ°€ babel을 ν†΅κ³Όν•˜λ„λ‘ ꡬ성을 λ³€κ²½ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ? μ €μ—κ²ŒλŠ” 덜 κΈ΄κΈ‰ν•˜μ§€λ§Œ JSXλ₯Ό λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλ‹€λ©΄ λ©‹μ§ˆ κ²ƒμž…λ‹ˆλ‹€.

gatsby-node.js μ—μ„œ import / export 지원을 ν™œμ„±ν™”ν•˜λŠ” λ‹¨κ³„λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? .mjs νŒŒμΌμ„ μ‚¬μš©ν•˜μ—¬ λ©˜μ…˜μ— 링크된 Medium κ²Œμ‹œλ¬Όμ΄μ§€λ§Œ Gatsbyμ—μ„œλŠ” μž‘λ™ν•˜μ§€ μ•Šμ„ 것 κ°™μ€λ°μš”?

μ‚¬μš©ν•˜λŠ” 방법이 babel-node λŒ€μ‹  node ?

λ‚˜λŠ” 이것을 μœ„ν•΄ esm 을 μ‚¬μš©ν•˜κ³  μ§€κΈˆκΉŒμ§€ μž‘λ™ν•©λ‹ˆλ‹€. λ‚΄κ°€ ν•œ 일은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. esm ( npm i esm )
  2. 루트 폴더( gatsby-node.js κ°€ ν¬ν•¨λœ λ™μΌν•œ 폴더)에 gatsby-node.esm.js λΌλŠ” νŒŒμΌμ„ λ§Œλ“­λ‹ˆλ‹€.
  3. λͺ¨λ“  μ½”λ“œλ₯Ό gatsby-node.js μ—μ„œ gatsby-node.esm.js
  4. gatsby-node.js λͺ¨λ“  μ½”λ“œλ₯Ό λ‹€μŒμœΌλ‘œ λ°”κΏ‰λ‹ˆλ‹€.
    javascript require = require('esm')(module) module.exports = require('./gatsby-node.esm.js')
  5. μ‚¬μš© import μ—μ„œ gatsby-node.esm.js 당신이 μ›ν•˜λŠ” λͺ¨λ“  πŸŽ‰

@KyleAMathews 이런 μ‹μœΌλ‘œν•˜λŠ” 것이 μœ„ν—˜ν•œκ°€μš”? μ•ˆμ „ν•˜λ‹€λ©΄ λ¬Έμ„œμ— μΆ”κ°€ν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. :)

이 νŒ¨ν„΄μ€ @nikoladevμ—μ„œ ν™•μ‹€νžˆ μž‘λ™ν•©λ‹ˆλ‹€! λ¬Έμ„œμ—μ„œ μ–΄λ””λ‘œ κ°ˆμ§€ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. @gatsbyjs/docs에 λŒ€ν•œ 아이디어가 μžˆμŠ΅λ‹ˆκΉŒ?

λ‚΄κ°€ ν•œ 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

require('babel-register')({
  presets: [ 'env' ]
})
require('babel-polyfill')
module.exports = require(`./gatsby-node.mjs`)

μΆ©λΆ„νžˆ 잘 λ˜λŠ” 것 κ°™κΈ΄ ν•œλ° μΊμ‹œκ°€ 엉망이 λ˜μ§€λŠ” μ•ŠλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€. gatsby-node.js λ₯Ό μˆ˜μ •ν•˜λ©΄ μΊμ‹œκ°€ μž¬μ„€μ •λ˜μ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•˜μ§€λ§Œ 관련이 μžˆλŠ”μ§€λŠ” λͺ¨λ₯΄κ² μ§€λ§Œ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

@KyleAMathews μ½˜ν…μΈ  및 데이터 μ†Œμ‹± 은 μ–΄λ–»μŠ΅λ‹ˆκΉŒ? 적어도 그것이 λ‚΄κ°€ 그것을 μ‚¬μš©ν•˜λŠ” μ΄μœ μž…λ‹ˆλ‹€.

그것은 μΌμ’…μ˜ λ‹€λ₯Έ λ…ΌμŸμ΄μ§€λ§Œ import μ‚¬μš©ν•˜λŠ” κΈ°νšŒκ°€ μ¦‰μ‹œ 지원될 수 μžˆμŠ΅λ‹ˆκΉŒ? 더 큰 Gatsby ν”„λ‘œμ νŠΈμ˜ 경우 gatsby-node.js μ—μ„œ μΌμ–΄λ‚˜λŠ” 일은 μ‹€μ œ ν”„λ‘ νŠΈ μ—”λ“œλ§ŒνΌ μ€‘μš”ν•˜λ©° import , async/await λ₯Ό μ‚¬μš©ν•˜μ—¬ ν˜„λŒ€μ μΈ λ°©μ‹μœΌλ‘œ μ½”λ”©ν•  수 μ—†λ‹€λŠ” 것이 μ§œμ¦λ‚©λ‹ˆλ‹€ async/await λ“±.

@KyleAMathews , 둜컬 ES6 νŒŒμΌμ„ μš”κ΅¬ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ? 예λ₯Ό λ“€μ–΄ λ‹€μŒκ³Ό 같은 src/utils/article.js 파일이 μžˆμŠ΅λ‹ˆλ‹€.

// src/utils/article.js
import { format } from 'date-fns'

export const createArticleUrl = (a) => (
  `/${format(a.publishDate, 'YYYY')}` +
  `/${format(a.publishDate, 'MM')}` +
  `/${format(a.publishDate, 'DD')}` +
  `/${a.category.urlSlug}` +
  `/${a.urlSlug}`
)

λ‚΄ gatsby-node.js 파일:

// gatsby-node.js
...
const { createArticleUrl } = require(`./src/utils/article`)
...

그리고 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

  Error: .../src/utils/article.js:1
  (function (exports, require, module, __filename, __dirname) { import { format } from 'date-fns'
                                                                ^^^^^^
  SyntaxError: Unexpected token import

μ–΄λ–€ 아이디어? 이 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 기사/κ²Œμ‹œλ¬Όμ— λŒ€ν•œ URL을 λ§Œλ“€κ³  React ꡬ성 μš”μ†Œμ—μ„œ ν•˜λŠ” κ²ƒμ²˜λŸΌ κ°€μ Έμ˜€κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. 감사 ν•΄μš”!

λ‹€μŒκ³Ό 같이 src/utils/article.js νŒŒμΌμ—μ„œ ES5λ₯Ό μ‚¬μš©ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

// src/utils/article.js
const { format } = require('date-fns')

var createArticleUrl = function (a) {
  return (
    `/${format(a.publishDate, 'YYYY')}` +
    `/${format(a.publishDate, 'MM')}` +
    `/${format(a.publishDate, 'DD')}` +
    `/${a.category.urlSlug}` +
    `/${a.urlSlug}`
  )
}

module.exports.createArticleUrl = createArticleUrl

λ‹€μŒκ³Ό 같이 gatsby-node.js ,

// gatsby-node.js
...
const { createArticleUrl } = require(`./src/utils/article`)
...

ES6 νŒŒμΌμ—μ„œ import { createArticleUrl } from '../utils/article' 처럼 createArticleUrl 도 κ°€μ Έμ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 이것을 μœ„ν•΄ esm 을 μ‚¬μš©ν•˜κ³  μ§€κΈˆκΉŒμ§€ μž‘λ™ν•©λ‹ˆλ‹€. λ‚΄κ°€ ν•œ 일은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. esm ( npm i esm )
  2. 루트 폴더( gatsby-node.js κ°€ ν¬ν•¨λœ λ™μΌν•œ 폴더)에 gatsby-node.esm.js λΌλŠ” νŒŒμΌμ„ λ§Œλ“­λ‹ˆλ‹€.
  3. λͺ¨λ“  μ½”λ“œλ₯Ό gatsby-node.js μ—μ„œ gatsby-node.esm.js
  4. gatsby-node.js λͺ¨λ“  μ½”λ“œλ₯Ό λ‹€μŒμœΌλ‘œ λ°”κΏ‰λ‹ˆλ‹€.
    js require = require('esm')(module) module.exports = require('./gatsby-node.esm.js')
  5. μ‚¬μš© import μ—μ„œ gatsby-node.js 당신이 μ›ν•˜λŠ” λͺ¨λ“  πŸŽ‰

@KyleAMathews 이런 μ‹μœΌλ‘œν•˜λŠ” 것이 μœ„ν—˜ν•œκ°€μš”? μ•ˆμ „ν•˜λ‹€λ©΄ λ¬Έμ„œμ— μΆ”κ°€ν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. :)

5λ²ˆμ§ΈλŠ” " import μ—μ„œ gatsby-node.esm.js ν•˜κ³  싢은거 λ‹€"μΈκ°€μš”?

@WeZZard 당신이 μ™„μ „νžˆ μ˜³μ•˜μŠ΅λ‹ˆλ‹€! 제 ν¬μŠ€νŒ…μ—μ„œ μˆ˜μ •ν•˜κ² μŠ΅λ‹ˆλ‹€.

이것이 μž‘λ™ν•˜λŠ” 또 λ‹€λ₯Έ 방법은 λ‹€μŒκ³Ό 같이 package.json을 μ—…λ°μ΄νŠΈν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

  "scripts": {
    "build": "npx --node-arg '-r esm' gatsby build",
    "develop": "npx --node-arg '-r esm' gatsby develop",
    "start": "npx --node-arg '-r esm' npm run develop",
    "serve": "npx --node-arg '-r esm' gatsby serve",
    "test": "echo \"Write tests! -> https://gatsby.app/unit-testing\""
  },

μƒˆ νŒŒμΌμ„ λ§Œλ“€ ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€

@reaktivo κ·€ν•˜μ˜ μŠ€ν¬λ¦½νŠΈλŠ” λ‘œμ»¬μ—μ„œ μž‘λ™ν•˜μ§€λ§Œ netlifyμ—μ„œ μž‘λ™ν•˜λ„λ‘ ν•  수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. npx 둜 netlify에 μ‚¬μ΄νŠΈλ₯Ό 배포할 수 μžˆμŠ΅λ‹ˆκΉŒ?

@rotexhawk 방금 예제λ₯Ό ν‘Έμ‹œ

https://github.com/reaktivo/gatsby-esm/
https://gatsby-esm-example.netlify.com/

당신이 μ‹€ν–‰ν•˜κ³  μžˆλŠ”μ§€ 확인 npm install --save-dev esm 전에 λΉŒλ“œ 섀정이 μ‹€ν–‰λ˜λŠ” npm run build λŒ€μ‹  gatsby build

이 컀밋을 ν™•μΈν•˜μ‹­μ‹œμ˜€: https://github.com/reaktivo/gatsby-esm/commit/cf620259ac8b118dea38b99409963cb26bf1b240

덕뢄에 esm을 μ„€μΉ˜ν–ˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” netlifyκ°€ npx λŒ€ν•œ μ•‘μ„ΈμŠ€ κΆŒν•œμ΄ μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. λͺ…령이 μ‹€νŒ¨ν–ˆλ‹€κ³  λ§ν•©λ‹ˆλ‹€. λ‚΄ λ…Έλ“œ 버전을 μ§€μ •ν–ˆμ§€λ§Œ 도움이 λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

@rotexhawk λ‚΄κ°€ 보낸 ν”„λ‘œμ νŠΈκ°€ Netlify에 배포된 것을 κ³ λ €ν•˜λ©΄ 정말 μ΄μƒν•©λ‹ˆλ‹€... μ–΄μ¨Œλ“  npx 을 ν”Όν•΄μ•Ό ν•˜λŠ” 경우 λ‹€μŒμ΄ μž‘λ™ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  "scripts": {
    "build": "node -r esm ./node_modules/bin/gatsby build",
    "develop": "node -r esm ./node_modules/bin/gatsby develop",
    "start": "npm run develop",
    "serve": "node -r esm ./node_modules/bin/gatsby serve",
    "test": "echo \"Write tests! -> https://gatsby.app/unit-testing\""
  },

@rotexhawk Netlify νŒ€μ— μ—°λ½ν•˜μ—¬ NPM_VERSION을 지정해야 ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€( https://www.netlify.com/docs/build-settings/#node -npm-and-yarn μ°Έμ‘°).

@reaktivo κ°€ ν•˜κ² μŠ΅λ‹ˆλ‹€. λͺ¨λ“  도움에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

GatsbyλŠ” es6 λͺ¨λ“ˆμ΄ gatsby-node.js 파일 λ‚΄μ—μ„œ μž‘λ™ν•΄μ•Ό ν•œλ‹€κ³  ν‘œμ‹œν•˜κΈ° λ•Œλ¬Έμ— esm μ ‘κ·Ό 방식을 λ¬Έμ„œμ— μΆ”κ°€ν•˜λŠ” 것을 κ°•λ ₯히 κ³ λ €ν•  κ²ƒμž…λ‹ˆλ‹€. 이 였λ₯˜ λ©”μ‹œμ§€λŠ” λͺ¨λ“ˆμ„ ν˜Όν•©ν•  λ•Œ μΈμ‡„λ©λ‹ˆλ‹€.

error This plugin file is using both CommonJS and ES6 module systems together which we don't support. You'll need to edit the file to use just one or the other.

es6 λͺ¨λ“ˆμ„ μ‚¬μš©ν•  수 μžˆμŒμ„ λΆ„λͺ…νžˆ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

esm λŠ” 원사 μž‘μ—… 곡간을 μ‚¬μš©ν•  λ•Œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μž‘μ—… 곡간 λͺ¨λ“ˆμ„ 찾을 수 μ—†λ‹€κ³  λ‚˜μ˜΅λ‹ˆλ‹€.

μ‹€μ œλ‘œ gatsby-node.ems.js 의 첫 번째 μˆ˜μ€€ κ°€μ Έμ˜€κΈ°μ—λ§Œ μž‘λ™ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ κ°€μ Έμ˜¨ ꡬ성 μš”μ†Œλ„ κ°€μ Έμ˜€λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄,

./gatsby-node.ems.js

import foo from "./foo";
const fooText = foo + " more text";

./ν›„

import bar from "bar";
const foo = bar("whatever");
export default foo;

였λ₯˜ λ°œμƒ:

Error in "C:\...\gatsby-node.js": Cannot find module 'bar'

λ…Έλ“œ λͺ¨λ“ˆμ€ κ±°μ˜κ°€ 있기 λ•Œλ¬Έμ—, λ‚˜λŠ” ν•¨κ»˜ μ‚¬μš© λ…Έλ“œμ— 원 --experimental-modules λŒ€μ‹  esm .

scripts.start λ₯Ό "node --experimental-modules ./node_modules/.bin/gatsby develop" 둜 λ³€κ²½ν•˜κ³  gatsby-node.js λ₯Ό gatsby-node.mjs 둜 λ³€κ²½ν–ˆμ§€λ§Œ

"~/website/gatsby-node.mjs" 였λ₯˜: ES λͺ¨λ“ˆμ„ λ‘œλ“œν•˜λ €λ©΄ κ°€μ Έμ˜€κΈ°λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€: ~/website/gatsby-node.mjs

였λ₯˜: [ERR_REQUIRE_ESM]: ES λͺ¨λ“ˆμ„ λ‘œλ“œν•˜λ €λ©΄ κ°€μ Έμ˜€κΈ°λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. ~/website/gatsby-node.mjs

κ³΅μ‹μ μœΌλ‘œ μ§€μ›ν•˜μ§€ μ•ŠμœΌλ©° 여기에 μ–ΈκΈ‰λœ ν•΄κ²° 방법은 μ—¬κΈ°κΉŒμ§€λ§Œ κ°€λŠ₯ν•©λ‹ˆλ‹€. νŒ¨ν‚€μ§€ 쀑 일뢀가 아직 이 μ‹€ν—˜μ  λ…Έλ“œ κΈ°λŠ₯κ³Ό ν˜Έν™˜λ˜μ§€ μ•Šκ±°λ‚˜ μž‘λ™ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. 상황이 μ•ˆμ •λ˜λ©΄ 이 주제λ₯Ό λ‹€μ‹œ μ‚΄νŽ΄λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

이제 ES λͺ¨λ“ˆμ΄ 더 이상 μ‹€ν—˜μ μ΄μ§€ μ•ŠμœΌλ―€λ‘œ 이 문제λ₯Ό λ‹€μ‹œ μ—΄μ–΄μ•Ό ν•©λ‹ˆκΉŒ?

그듀은 μ—¬μ „νžˆ β€‹β€‹μ‹€ν—˜μ μ΄λ©° μ™„μ „νžˆ μ™„μ„±λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κΉƒλ°œλ§Œ λΉΌλ©΄

κ·ΈλŸ¬λ‚˜ κ΅¬ν˜„μ€ μ—¬μ „νžˆ β€‹β€‹μ‹€ν—˜μ μ΄λ©° 변경될 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 이것에 깊이 λΉ μ Έ λ“€μ—ˆκ³ , 아직 κ³ ν†΅μ˜ κ°€μΉ˜κ°€ μ—†μŠ΅λ‹ˆλ‹€. λ‘œλ”κ°€ κ΅¬ν˜„λ  λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦¬κ±°λ‚˜ esm νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.

babel을 μ‚¬μš©ν•˜μ—¬ μ†”λ£¨μ…˜μ„ 찾은 μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ? λ‚΄ babel ꡬ성을 gatsby ν”„λ‘œμ νŠΈμ— λ“œλ‘­ν•˜κ³  λͺ¨λ“  것이 μž‘λ™ν•˜λ„λ‘ ν•  수 μžˆλ‹€λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€.

gatsbyλ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ module.exports 둜 λŒμ•„κ°€μ•Ό ν•˜λŠ” 것은 정말 μ—„μ²­λ‚œ ν›„ν‡΄μ²˜λŸΌ λŠκ»΄μ§‘λ‹ˆλ‹€.

Modern web tech without the headache -> λ³„λ‘œ :(

npm i esm

그런 λ‹€μŒ λͺ…령을 λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•©λ‹ˆλ‹€.

https://github.com/wesbos/awesome-uses/blob/master/package.json#L39 -L42

@wesbos @reaktivo μ΅œμ‹  κ°œμΈ λΉ„(제 κ²½μš°μ—λŠ” 2.22.17)μ—μ„œ ν•΄λ‹Ή μˆ˜μ • 사항을 계속 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

ν•΄λ‹Ή μ†”λ£¨μ…˜μ„ μ‚¬μš©ν•˜μ—¬ 문제 없이 μž‘λ™ν–ˆμ§€λ§Œ 였늘 gatsbyλ₯Ό μ—…λ°μ΄νŠΈν•˜κ³  κ°€μ Έμ˜€κΈ° 였λ₯˜κ°€ λ‹€μ‹œ λ°œμƒν•˜κΈ° μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€.

```

npx --node-arg '-r esm' κ°œμΈ λΉ„ 개발

였λ₯˜ #10123 ꡬ성

μ‚¬μ΄νŠΈμ˜ gatsby-configλ₯Ό λ‘œλ“œν•˜λŠ” λ™μ•ˆ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 였λ₯˜λ₯Ό μˆ˜μ •ν•˜κ³  λ‹€μ‹œ μ‹œλ„ν•˜μ‹­μ‹œμ˜€.

였λ₯˜: /project/gatsby-config.js:1
(ν•¨μˆ˜(내보내기, μš”κ΅¬, λͺ¨λ“ˆ, __filename, __dirname) { "url-join"μ—μ„œ urlJoin κ°€μ Έμ˜€κΈ°;
^^^^^^
SyntaxError: λͺ¨λ“ˆ``` μ™ΈλΆ€μ—μ„œ import 문을 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

μœ„μ˜ λ‚΄ esm 트릭이 μž‘λ™μ„ λ©ˆμ·„μŠ΅λ‹ˆλ‹€. 심지어 κ°œμΈ λΉ„μ™€ λ…Έλ“œ 버전을 λ‘€λ°±ν–ˆλŠ”λ°λ„ μ§€μ†λ©λ‹ˆλ‹€.

같은 λ¬Έμ œκ°€ μžˆλŠ” μ‚¬λžŒμ΄ 있으면 여기에 μžμ„Ένžˆ μ„€λͺ…ν•˜μ„Έμš”. https://github.com/reaktivo/gatsby-esm/issues/1

@caycecollins μˆ˜μ • 사항을 μ°Ύμ•˜μŠ΅λ‹ˆκΉŒ?

@wesbos μ§€κΈˆμ€ es5 require둜 λ˜λŒμ•„κ°”μŠ΅λ‹ˆλ‹€. :(

νŽΈμ§‘: 방금 https://github.com/gatsbyjs/gatsby/issues/24925 μ—μ„œ μ΅œμ‹  μˆ˜μ • 사항을 λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€ ... μ‹œλ„ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€!

ν•œ μ‹œκ°„ λ™μ•ˆ μ΄κ²ƒμœΌλ‘œ 어렀움을 κ²ͺμ—ˆκ³  λ§ˆμΉ¨λ‚΄ λΉŒλ“œλ₯Ό μœ„ν•΄ package.json에 무엇을 λ„£μ—ˆλŠ”μ§€μ— 관계없이 Netlify UI ꡬ성이 μš°μ„ ν•œλ‹€λŠ” 것을 μ•Œμ•„λƒˆμŠ΅λ‹ˆλ‹€. 이것이 λͺ…백해진 것은 netlify.toml을 μΆ”κ°€ν•˜κΈ° μ „κΉŒμ§€μ˜€μŠ΅λ‹ˆλ‹€. μ΄μ•ΌκΈ°μ˜ 도덕, Netlify UI λΉŒλ“œ 섀정을 νŽΈμ§‘ν•˜κ±°λ‚˜ μ§€μš°κ³  ꡬ성에 λ²„λ¦¬μ‹­μ‹œμ˜€. λ‚˜λŠ” ν›„μžλ₯Ό μ„ ν˜Έν•œλ‹€. πŸ˜„

[build]
  command = "npm run build"
  publish = "public"

예, 이것이 μ €μ—κ²Œ νš¨κ³Όμ μ΄λΌλŠ” 점은 μ£Όλͺ©ν•  κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.

"build": "NODE_OPTIONS='-r esm' gatsby build",

와, 변경이 μ–΄λ ΅λ‹€λŠ” 것을 μ΄ν•΄ν•˜μ§€λ§Œ ES λͺ¨λ“ˆμ€ 이제 Javascriptμ΄λ―€λ‘œ (μ™„μ „νžˆ νƒ€λ‹Ήν•œ μ΄μœ κ°€ 무엇이든) μœ μ§€ κ΄€λ¦¬μžκ°€ _Javascript 지원에 λ°˜λŒ€ν•˜μ—¬_ μ‹Έμš°λŠ” 것을 λ³΄λŠ” 것은 정말 μ‹€λ§μŠ€λŸ½μŠ΅λ‹ˆλ‹€. 특히 JDaltonκ³Ό 그의 esm νŒ¨ν‚€μ§€κ°€ λ„ˆλ¬΄ μ‰¬μ›Œ!

μΆ”μ‹ : 당신이 μ•Œμ§€ λͺ»ν•  μˆ˜λ„ μžˆλŠ” λͺ‡ 가지 κ΄€λ ¨ μ„ΈλΆ€ 정보 ...

  • 이것은 두 쀄 μˆ˜μ •μž…λ‹ˆλ‹€. Gatsby에 "μ§„μž…μ "이 μ—¬λŸ¬ 개 μžˆλŠ” κ²½μš°κ°€ μ•„λ‹ˆλ©΄ 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 전체 PR은 esm νŒ¨ν‚€μ§€μ— λŒ€ν•œ package.json ν•­λͺ©κ³Ό λ‹€μŒ 행이 λ©λ‹ˆλ‹€.
require = require("esm")(module/*, options*/)
module.exports = require("./main.js")
  • 이 λͺ¨λ“ˆμ€ 이미 Knex와 같은 μ£Όμš” λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ 널리 μ‚¬μš©λ©λ‹ˆλ‹€. 말 κ·ΈλŒ€λ‘œ 135개 ... 이미 그것에 μ˜μ‘΄ν•˜λŠ” _천_개의 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μžˆμŠ΅λ‹ˆλ‹€!

  • Lodash의 μ œμž‘μžκ°€ μž‘μ„±ν–ˆμœΌλ―€λ‘œ 이것은 일뢀 μ£Όλ‹ˆμ–΄ μ—”μ§€λ‹ˆμ–΄μ˜ 첫 NPM ν”„λ‘œμ νŠΈκ°€ μ•„λ‹™λ‹ˆλ‹€. λ…Έλ ¨ν•œ μ „λ¬Έκ°€κ°€ μž‘μ„±ν•œ μ§„μ§€ν•œ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€.

  • μ™„μ „νžˆ μ—­ν˜Έν™˜ κ°€λŠ₯ν•©λ‹ˆλ‹€. λˆ„κ΅°κ°€κ°€ ESκ°€ μ•„λ‹Œ λͺ¨λ“ˆ μ½”λ“œμ—μ„œ import λ˜λŠ” export λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” ν•œ(그리고 λ‚˜λŠ” 이것이 νƒœμ΄ˆλΆ€ν„° JS κΈˆμ§€ ν‚€μ›Œλ“œμ˜€λ‹€κ³  ν™•μ‹ ν•©λ‹ˆλ‹€) λͺ¨λ“  κΈ°μ‘΄ μ½”λ“œλŠ” 계속 λ™μΌν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€.

  • μ„±λŠ₯ λ¬Έμ œκ°€ μžˆλŠ” 경우 λͺ…령쀄 인수λ₯Ό μ‚¬μš©ν•˜μ—¬ 이 κΈ°λŠ₯을 "게이트 μœ μ§€"ν•˜λŠ” 것이 맀우 μ‰½μŠ΅λ‹ˆλ‹€(예 knex λŠ” 이 경둜λ₯Ό μ„ νƒν–ˆμŠ΅λ‹ˆλ‹€).

κ·Έλž˜μ„œ 그것은 "μ„Έ μ€„μ˜ μ½”λ“œλ‘œ ν˜„λŒ€μ μΈ μžλ°”μŠ€ν¬λ¦½νŠΈ μ–Έμ–΄ κΈ°λŠ₯을 μ–»μŠ΅λ‹ˆλ‹€" λ˜λŠ” ... 그것을 μœ„ν•΄ μ‹Έμš°λŠ” κ²ƒμž…λ‹ˆλ‹€. ν˜œνƒ.

관심이 μžˆλ‹€λ©΄ 기꺼이 PR을 μ œμΆœν•˜κ² μŠ΅λ‹ˆλ‹€. :)

λˆ„κ΅°κ°€ μ΅œμ’… μ†”λ£¨μ…˜μ„ μ œκ³΅ν•˜κ³  이 μŠ€λ ˆλ“œλ₯Ό μž κΈ€ 수 μžˆμŠ΅λ‹ˆκΉŒ?

λŒ€ν™”κ°€ μ—¬μ „νžˆ μ§„ν–‰λ˜κ³  μžˆλŠ” 맀우 μ€‘μš”ν•˜μ§€λ§Œ 겉보기에 λ‹«νžŒ λ¬Έμ œμ— λŒ€ν•œ λͺ¨λ“  λŒ“κΈ€μ„ 훑어보고 μ–΄λ–€ λŒ“κΈ€μ΄ κ°€μž₯ 많이 μΆ”μ²œλ˜κ³  κ°€μž₯ 쒋은 해결책이 될 수 μžˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ λͺ¨λ“  λŒ“κΈ€μ„ ν›‘μ–΄λ³΄λŠ” 이 좀을 μΆ”λŠ” 것을 μ‹«μ–΄ν•©λ‹ˆλ‹€. πŸ˜”

λ‚΄κ°€ λ§ν–ˆλ“―μ΄, μ–΄λ €μš΄ 뢀뢄은 μ œμž‘λ˜μ§€ esm λͺ¨λ“ˆ μž‘μ—… :이 일을 맀우 κ°„λ‹¨ν•˜κ²Œ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. Gatsby μ•„ν‚€ν…μ²˜μ— λŒ€ν•΄ μ•„λŠ” 것이 μžˆλ‹€λ©΄ 직접 PR을 μ œμΆœν•  κ²ƒμž…λ‹ˆλ‹€(또 λ‹€λ₯Έ μ£Όμš” λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ 이λ₯Ό μ‚¬μš©ν•˜λŠ” 것을 보렀면 Knex λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€).

μ–΄λ €μš΄ 뢀뢄은 κ·Έ 지식을 가진 μœ μ§€ κ΄€λ¦¬μžλ₯Ό λŒλ³΄λŠ” κ²ƒμž…λ‹ˆλ‹€ :(

λͺ¨λ“  μœ μ§€ κ΄€λ¦¬μžκ°€ μ΅œμ‹  JS λͺ¨λ“ˆ ꡬ문을 개인적으둜 μ‹«μ–΄ ν•˜λ”λΌλ„ μ΅œμ†Œν•œ μ‚¬μš©μžμ˜ μš”κ΅¬μ— 감사할 수 μžˆλ‹€κ³  생각할 κ²ƒμž…λ‹ˆλ‹€. λ‹€μ‹œ, μ•„λ§ˆλ„ 단 두 μ€„μ˜ μ½”λ“œλ‘œ) 그렇지 μ•ŠμœΌλ©΄ μ œμ•ˆν•©λ‹ˆλ‹€. 이 νŒ€μ΄ λ‹€λ₯Έ λ¬Έμ œμ— λŒ€ν•΄ μ–Όλ§ˆλ‚˜ ν›Œλ₯­ν–ˆλŠ”지 κ°μ•ˆν•  λ•Œ μ†”μ§νžˆ μ €μ—κ²ŒλŠ” ν˜Όλž€μŠ€λŸ½μŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ λ§ν–ˆλ“―μ΄ μ–΄λ €μš΄ 뢀뢄은 esm λͺ¨λ“ˆμ„ μž‘λ™ν•˜κ²Œ ν•˜λŠ” 것이 _μ•„λ‹ˆλ‹€_: 일을 _맀우_ κ°„λ‹¨ν•˜κ²Œ ν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. Gatsby μ•„ν‚€ν…μ²˜μ— λŒ€ν•΄ μ•„λŠ” 것이 μžˆλ‹€λ©΄ 직접 PR을 μ œμΆœν•  κ²ƒμž…λ‹ˆλ‹€(또 λ‹€λ₯Έ μ£Όμš” λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ 이λ₯Ό μ‚¬μš©ν•˜λŠ” 것을 보렀면 Knex λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€).

μ–΄λ €μš΄ 뢀뢄은 κ·Έ 지식을 가진 μœ μ§€ κ΄€λ¦¬μžλ₯Ό λŒλ³΄λŠ” κ²ƒμž…λ‹ˆλ‹€ :(

λͺ¨λ“  μœ μ§€ κ΄€λ¦¬μžκ°€ μ΅œμ‹  JS λͺ¨λ“ˆ ꡬ문에 λŒ€ν•΄ 개인적으둜 _μ‹«μ–΄ν•˜λŠ”_ κΈ°λŠ₯을 κ°–κ³  μžˆλ‹€κ³  해도 μ΅œμ†Œν•œ μ‚¬μš©μžμ˜ μš”κ΅¬μ— 감사할 수 μžˆλ‹€κ³  생각할 κ²ƒμž…λ‹ˆλ‹€. λ‹€μ‹œ, μ•„λ§ˆλ„ 단 두 μ€„μ˜ μ½”λ“œλ‘œ) 그렇지 μ•ŠμœΌλ©΄ μ œμ•ˆν•©λ‹ˆλ‹€. 이 νŒ€μ΄ λ‹€λ₯Έ λ¬Έμ œμ— λŒ€ν•΄ μ–Όλ§ˆλ‚˜ ν›Œλ₯­ν–ˆλŠ”지 κ°μ•ˆν•  λ•Œ μ†”μ§νžˆ μ €μ—κ²ŒλŠ” ν˜Όλž€μŠ€λŸ½μŠ΅λ‹ˆλ‹€.

이 μ£Όμ œμ— λŒ€ν•΄ κ΄€λ¦¬μžλ‘œλΆ€ν„° ν•œλ§ˆλ”” λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰