<p>gatsby-node.jsはES6のむンポヌトを蚱可しおいたせん</p>

䜜成日 2018幎09月02日  Â·  39コメント  Â·  ゜ヌス: gatsbyjs/gatsby

説明

gatsby-node.jsはES6javascriptを蚱可したせん。

再珟する手順

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モゞュヌルのサポヌトは匕き続き仕掛品です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を䜿甚できるのは玠晎らしいこずです。

䜕が有効にする手順になりたすimport / exportでのサポヌトをgatsby-node.js  .mjsファむルを䜿甚したメンションにリンクされたMediumの投皿ですが、Gatsbyでは機胜しないず思いたすか

babel-node代わりにnode babel-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-node.jsで䜕が起こるかは、実際のフロント゚ンドずほが同じくらい重芁であり、 import 、 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ファむルの通垞のようにcreateArticleUrlむンポヌトするこずもできたすimport { createArticleUrl } from '../utils/article' 。

私はこれに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番目の「 gatsby-node.esm.js importを䜿いたい」ですか

@WeZZardあなたは完党に正しいです 投皿で修正したす。

これが機胜するこずを私が芋぀けたもう1぀の方法は、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 

おかげで、私は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チヌムず連絡を。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は、yarnワヌクスペヌスを䜿甚しおいる堎合は機胜しないようです。 ワヌクスペヌスモゞュヌルが芋぀からないず衚瀺されたす。

実際には、 gatsby-node.ems.jsの最初のレベルのむンポヌトでのみ機胜し、むンポヌトされたコンポヌネントもむンポヌトするものでは機胜しないようです。

䟋えば、

./gatsby-node.ems.js

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

./foo

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

゚ラヌをスロヌしたす

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

Nodeモゞュヌルはほがそこにあるので、 --experimental-modules代わりにesm --experimental-modulesノヌドを䜿甚したかったのです。

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

公匏にはサポヌトされおおらず、ここに蚘茉されおいる回避策はこれたでのずころしか実行できないこずに泚意しおください。 䞀郚のパッケヌゞは、この実隓的なノヌド機胜ずただ互換性がないか、機胜しない可胜性がありたす。 物事が安定したら、このトピックを再怜蚎できたす。

それらはただ実隓的であり、完党には完成しおいたせん。 旗だけが削陀されたした

ただし、実装は実隓的なたたであり、倉曎される可胜性がありたす

私はこれを深く掘り䞋げたす、そしおそれはただ苊痛の䟡倀がありたせん。 ロヌダヌが実装されるのを埅぀か、 esmパッケヌゞを䜿甚しおください。

誰かがbabelを䜿甚しお解決策を芋぀けたしたか gatsbyプロゞェクトにbabel蚭定をドロップしお、すべお機胜させるこずができれば玠晎らしいず思いたす。

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は、最新のgatsby私の堎合は2.22.17でもその修正を䜿甚できたすか

私はその゜リュヌションを䜿甚しお問題なく動䜜したしたが、今日gatsbyを曎新し、むンポヌト゚ラヌが再び発生し始めたした

`` `

npx --node-arg'-r esm'gatsbydevelop

゚ラヌ10123蚭定

サむトのgatsby-configを読み蟌もうずしたずきに゚ラヌが発生したした。 ゚ラヌを修正しお、再詊行しおください。

゚ラヌ/project/gatsby-config.js1
functionexports、require、module、__ filename、__ dirname{import urlJoin from "url-join";
^^^^^^
SyntaxErrorモゞュヌルの倖郚でむンポヌトステヌトメントを䜿甚できたせん `` `

別の方法ずしお、 gatsby-*ファむルにTypeScriptをできたす。

䞊蚘の私のesmトリックはちょうど機胜しなくなりたした。 gatsbyずノヌドバヌゞョンをロヌルバックしおも、それは持続したす。

誰かが同じ問題を抱えおいる堎合は、ここで詳现を説明しおください //github.com/reaktivo/gatsby-esm/issues/1

@caycecollins修正を芋぀けたしたか

@wesbos私は今のずころes5requireに戻るこずになりたした:(

線集ここであなたの最新の修正に気づきたしたhttps://github.com/gatsbyjs/gatsby/issues/24925 ...詊しおみたす

これに1時間苊劎し、最終的に、ビルド甚にpackage.jsonに䜕を入れおも、NetlifyUI構成が優先されおいるこずがわかりたした。 これが明らかになったのは、netlify.tomlを远加するたではありたせんでした。 話の教蚓、Netlify UIビルド蚭定を線集するか、それらをクリアしお構成に入れたす。 私は埌者が奜きです。 😄

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

はい、これは私のために働いたこずは泚目に倀したす

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

うわヌ、倉曎が難しいこずは理解しおいたすが、ESモゞュヌルは珟圚Javascriptであるため、メンテナが_Javascriptのサポヌトに反察しお_戊っおいるのを芋るのは本圓に残念です...特にJDaltonず圌のesmパッケヌゞがずおも簡単です

PSあなたが気付いおいないかもしれないいく぀かの関連する詳现...

  • これは2行の修正です。 Gatsbyに耇数の「゚ントリポむント」がない限り、これを修正するPR党䜓は3行になりたす。 esmパッケヌゞのpackage.json゚ントリず、次の行です。
require = require("esm")(module/*, options*/)
module.exports = require("./main.js")
  • このモゞュヌルは、Knexなどの䞻芁なラむブラリですでに広く䜿甚されおいたす。 文字通り135 ... _千_のラむブラリがすでにそれに䟝存しおいたす

  • Lodashの䜜成者によっお曞かれたので、これはゞュニア゚ンゞニアの最初のNPMプロゞェクトではありたせん。経隓豊富な専門家によっお曞かれた本栌的なラむブラリです。

  • それは完党に䞋䜍互換性がありたす誰かが非ESモゞュヌルコヌドでimportたたはexportを䜿甚しない限りそしおそれらは時間の倜明けからJS犁止キヌワヌドであるず確信しおいたすすべお存圚したすコヌドは同じように機胜し続けたす

  • パフォヌマンス䞊の懞念がある堎合は、コマンドラむン匕数を䜿甚しおこの機胜を「ゲヌトキヌプ」するのは簡単ですたずえば、 knexはこのルヌトを遞択したした

぀たり、「3行のコヌドで最新のJavascript蚀語機胜を手に入れる」ずいうこずですか、それずも...それず戊うのですか 利点。

興味があれば、PRを提出させおいただきたす:)

誰かが最終的な解決策を提䟛し、このスレッドをロックできたすか

䌚話がただ行われおいる非垞に重芁であるが閉じおいるように芋える問題ですべおのコメントをスキミングするこのダンスを行うのは嫌いであり、すべおのコメントをふるいにかけお、どれが最も芪指を立おおおり、最良の解決策である可胜性が高いかを確認しようずしたす😔

私が蚀ったように、難しい郚分はesmモゞュヌルを機胜させるこずではありたせんそれは物事を非垞に単玔にするように蚭蚈されおいたす。 Gatsbyアヌキテクチャに぀いお䜕か知っおいれば、自分でPRを提出したすたた、別の䞻芁なラむブラリがそれを䜿甚しおいるこずを確認するには、Knexを芋おください。

難しいのは、その知識を持ったメンテナに気を配っおもらうこずです:(

すべおのメンテナが最新のJSモゞュヌル構文を個人的に嫌っおいたずしおも、少なくずもナヌザヌのそれに察する欲求を理解できるず思うでしょう...しかし、この問題を再床開くこずさえ拒吊し、それを修正するこずは蚀うたでもありたせん繰り返しになりたすが、おそらく2行のコヌドだけでそうではないこずを瀺唆しおいたす。 このチヌムが他の問題にどれほど優れおいるかを考えるず、正盎なずころ私には混乱しおいたす。

私が蚀ったように、難しい郚分はesmモゞュヌルを機胜させるこずではありたせん。それは物事を非垞に単玔にするように蚭蚈されおいたす。 Gatsbyアヌキテクチャに぀いお䜕か知っおいれば、自分でPRを提出したすたた、別の䞻芁なラむブラリがそれを䜿甚しおいるこずを確認するには、Knexを芋おください。

難しいのは、その知識を持ったメンテナに気を配っおもらうこずです:(

すべおのメンテナが最新のJSモゞュヌル構文に察しお個人的な「嫌い」を持っおいたずしおも、少なくずもナヌザヌのそれに察する欲求を理解できるず思うでしょう...しかし、この問題を再床開くこずさえ拒吊し、それを修正するこずは蚀うたでもありたせん繰り返しになりたすが、おそらく2行のコヌドだけでそうではないこずを瀺唆しおいたす。 このチヌムが他の問題にどれほど優れおいるかを考えるず、正盎なずころ私には混乱しおいたす。

この件に぀いおメンテナから䞀蚀お願いしたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡