рд╣реИрд▓реЛ, рдореИрдВ рдПрдХ рдмреНрд▓реЙрдЧ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдкреЛрд╕реНрдЯ рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдореИрдВ рдЕрдкрдиреЗ рд╕рднреА рдкреЛрд╕реНрдЯ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреЛрд╕реНрдЯ рдореЗрдВ рдПрдХ рдХрд╡рд░ рд╣реЛрддрд╛ рд╣реИред
рдиреАрдЪреЗ рдореЗрд░рд╛ рдХреЛрдб рд╣реИ:
{posts.map(post => {
return <li key={post.node.fields.slug}>
<Link to={post.node.fields.slug}>
<img className="news-img" src={require(`../${post.node.frontmatter.cover.relativePath}`)} />
<h3 className="news-titles">{post.node.frontmatter.title}</h3>
<p className="news-desc"> {post.node.excerpt}</p>
</Link>
</li>
}
)}
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓реА:
warning in ./src/pages/md/new4/new4.md
Module parse failed: /Users/magicly/development/blog/gatsby-starter-blog/src/pages/md/new4/new4.md Assigning to rvalue (1:2)
You may need an appropriate loader to handle this file type.
SyntaxError: Assigning to rvalue (1:2)
at Parser.pp$4.raise (/Users/magicly/development/blog/gatsby-starter-blog/node_modules/acorn/dist/acorn.js:2221:15)
at Parser.pp$2.checkLVal (/Users/magicly/development/blog/gatsby-starter-blog/node_modules/acorn/dist/acorn.js:1509:12)
at Parser.pp$3.parseMaybeUnary (/Users/magicly/development/blog/gatsby-starter-blog/node_modules/acorn/dist/acorn.js:1685:24)
at Parser.pp$3.parseExprOps (/Users/magicly/development/blog/gatsby-starter-blog/node_modules/acorn/dist/acorn.js:1637:21)
at Parser.pp$3.parseMaybeConditional (/Users/magicly/development/blog/gatsby-starter-blog/node_modules/acorn/dist/acorn.js:1620:21)
at Parser.pp$3.parseMaybeAssign (/Users/magicly/development/blog/gatsby-starter-blog/node_modules/acorn/dist/acorn.js:1597:21)
at Parser.pp$3.parseExpression (/Users/magicly/development/blog/gatsby-starter-blog/node_modules/acorn/dist/acorn.js:1573:21)
at Parser.pp$1.parseStatement (/Users/magicly/development/blog/gatsby-starter-blog/node_modules/acorn/dist/acorn.js:727:47)
at Parser.pp$1.parseTopLevel (/Users/magicly/development/blog/gatsby-starter-blog/node_modules/acorn/dist/acorn.js:638:25)
at Parser.parse (/Users/magicly/development/blog/gatsby-starter-blog/node_modules/acorn/dist/acorn.js:516:17)
at Object.parse (/Users/magicly/development/blog/gatsby-starter-blog/node_modules/acorn/dist/acorn.js:3098:39)
at Parser.parse (/Users/magicly/development/blog/gatsby-starter-blog/node_modules/webpack/lib/Parser.js:902:15)
at NormalModule.<anonymous> (/Users/magicly/development/blog/gatsby-starter-blog/node_modules/webpack/lib/NormalModule.js:104:16)
at NormalModule.onModuleBuild (/Users/magicly/development/blog/gatsby-starter-blog/node_modules/webpack/node_modules/webpack-core/lib/NormalModuleMixin.js:310:10)
at nextLoader (/Users/magicly/development/blog/gatsby-starter-blog/node_modules/webpack/node_modules/webpack-core/lib/NormalModuleMixin.js:275:25)
at /Users/magicly/development/blog/gatsby-starter-blog/node_modules/webpack/node_modules/webpack-core/lib/NormalModuleMixin.js:259:5
@ ./src/pages ^\.\/.*$
рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдкреГрд╖реНрда рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдкреЗрдЬ рдмрдирд╛рддрд╛ рд╣реВрдВ, рдФрд░ рддреИрдирд╛рдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓реАрдВ:
Uncaught TypeError: Cannot read property 'call' of undefined
at t (bootstrap 29073caтАж:52)
at Object../src/components/Footer/footer.css (footer.css:1)
at t (bootstrap 29073caтАж:52)
at Object.<anonymous> (index.jsx:5)
at Object../src/components/Footer/index.jsx (layout-component---index-adc8f24тАж.js:153)
at t (bootstrap 29073caтАж:52)
at Object.<anonymous> (index.jsx:3)
at Object../node_modules/babel-loader/lib/index.js?{"plugins":["/Users/magicly/development/blog/gatsby-starter-blog/node_modules/gatsby/dist/utils/babel-plugin-extract-graphql.js","add-module-exports","add-module-exports","add-module-exports","transform-object-assign",["transform-react-jsx",{"pragma":"Glamor.createElement"}],"babel-plugin-glamor"],"presets":["/Users/magicly/development/blog/gatsby-starter-blog/node_modules/babel-preset-react/lib/index.js","/Users/magicly/development/blog/gatsby-starter-blog/node_modules/babel-preset-es2015/lib/index.js","/Users/magicly/development/blog/gatsby-starter-blog/node_modules/babel-preset-stage-1/lib/index.js","/Users/magicly/development/blog/gatsby-starter-blog/node_modules/babel-preset-env/lib/index.js","/Users/magicly/development/blog/gatsby-starter-blog/node_modules/babel-preset-stage-0/lib/index.js","/Users/magicly/development/blog/gatsby-starter-blog/node_modules/babel-preset-react/lib/index.js"],"cacheDirectory":true}!./src/layouts/index.jsx (layout-component---index-adc8f24тАж.js:757)
at t (bootstrap 29073caтАж:52)
at index.jsx?8a0a:11
рдлрд┐рд░ рдореИрдВ рдЕрдкрдирд╛ рдХреЛрдб рдЗрд╕рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реВрдВ:
{posts.map(post => {
const path = `../${post.node.frontmatter.cover.relativePath}`;
return <li key={post.node.fields.slug}>
<Link to={post.node.fields.slug}>
<img className="news-img" src={require(path)} />
<h3 className="news-titles">{post.node.frontmatter.title}</h3>
<p className="news-desc"> {post.node.excerpt}</p>
</Link>
</li>
}
)}
рдФрд░ рдореБрдЭреЗ рдХрдВрд╕реЛрд▓ рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓реА,
``` рдЪреЗрддрд╛рд╡рдиреА 1 рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд 10:31:08
./src/pages/news/index.jsx . рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА
рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд┐рд░реНрднрд░рддрд╛рдПрдБ:
103:74-87 рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ
@ ./src/pages/news/index.jsx 103:74-87
and the error on web page:
рддреНрд░реБрдЯрд┐: рдореЙрдбреНрдпреВрд▓ '../md/new4/cover4.png' рдирд╣реАрдВ рдЦреЛрдЬрд╛ рдЬрд╛ рд╕рдХрд╛ред
http://localhost :8000/commons.js:55706:42
webpackContextResolve (рд╡реЗрдмрдкреИрдХ:/src/pages/news
^./. $:11webpackContext (рд╡реЗрдмрдкреИрдХ:/src/рдкреЗрдЬ/рд╕рдорд╛рдЪрд╛рд░^./. $:8
http://localhost :8000/commons.js:7945:98
Array.map
(рдореВрд▓ рдирд┐рд╡рд╛рд╕реА)
рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛.рд░реЗрдВрдбрд░
рд╡реЗрдмрдкреИрдХ:///src/pages/news/index. рдЬреЗрдПрд╕рдПрдХреНрд╕:21
рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛.рд░реЗрдВрдбрд░
webpack:///~/react-proxy/modules/createPrototypeProxy.js:44
http://localhost :8000/commons.js:30838:22
рдЙрдкрд╛рдпрдЬреАрд╡рдирдЪрдХреНрд░Perf
рд╡реЗрдмрдкреИрдХ: ///~/react-dom/lib/ReactCompositeComponent.js:75
ReactCompositeComponentWrapper._renderValidatedComponentWithOwnerOrContext
рд╡реЗрдмрдкреИрдХ: ///~/react-dom/lib/ReactCompositeComponent.js:794
I am sure the path '../md/new4/cover4.png' is right, because if I change code to:
{рдкреЛрд╕реНрдЯ.рдореИрдк (рдкреЛрд╕реНрдЯ => {
рд╡рд╛рдкрд╕реА
{рдкреЛрд╕реНрдЯ.рдиреЛрдб.рдЕрдВрд╢}
рдзрдиреНрдпрд╡рд╛рдж~
рдореИрдВ рдЧреВрдЧрд▓
the request of a dependency is an expression
рдФрд░ рдЕрдВрдд рдореЗрдВ рдпрд╣ https://webpack.github.io/docs/context.html рдкрд╛рдпрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗрдмрдкреИрдХ рдбрд╛рдпрдирд╛рдорд┐рдХ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж
{posts.map(post => {
let path = `${post.node.frontmatter.cover.relativePath}`;
path = path.slice(0, path.lastIndexOf('.'))
return <li key={post.node.fields.slug}>
<Link to={post.node.fields.slug}>
<img className="news-img" src={require('../' + path + '.png')} />
<h3 className="news-titles">{post.node.frontmatter.title}</h3>
<p className="news-desc"> {post.node.excerpt}</p>
</Link>
</li>
}
)}
рдФрд░ рдЕрдм рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж @ рдореИрдЬрд┐рдХрд▓реА рдЗрд╕ рдлрд┐рдХреНрд╕ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рдореИрдВ Gatsbyv 0.x рд╕реЗ v1.x рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рдЗрд╕ рдореБрджреНрджреЗ рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рдЙрд▓рдЭрд╛ рджрд┐рдпрд╛ред рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЗрд╕ рдкрд░ рдареЛрдХрд░ рдЦрд╛рддрд╛ рд╣реИ, рдореИрдВ рд╡рд╣реА рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЧрддрд┐рд╢реАрд▓ рд╣реЛред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдФрд░ @ рдореИрдЬрд┐рдХрд▓реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЪреАрдЬреЛрдВ рдХреЗ рд░реВрдк рд╕реЗ, рд╣рдо рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╡рд░ рдЫрд╡рд┐ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдлреНрд░рдВрдЯрдореИрдЯрд░ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓рд╛ рдорд╛рд░реНрдЧ рд╣реИред рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЬреЛ Gatsby рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдмреНрд▓реЙрдЧ рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реИ, рдЖрдкрдХреЗ рдкрд╛рд╕ рд╢рд╛рдпрдж рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛:
---
title: The title of the post
featured_image: ./teaser.jpg
---
рдлрд┐рд░ рдЖрдкрдХреЗ рд╕рднреА рд▓реЗрдЦреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдкрд░ рдЖрдкрдХреЗ рдЧреНрд░рд╛рдлрд╝рдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ, рдЖрдк featured_image
(рдЬрд┐рд╕реЗ @magicly рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рдерд╛ cover
) рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
frontmatter {
title
featured_image {
name
ext
relativePath
}
}
рдЕрдм рдЖрдк рд╢рд╛рдпрдж рд╕рднреА рдкрджреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╢реАрд░реНрд╖рдХ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реБрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдЫрд╡рд┐ рдХреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдкреГрд╖реНрда рдкрд░ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЕрдкрдиреЗ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░, рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
// тАж
// Create a new require context for Webpack
const requireFeatureImage = require.context(
`./../pages/portfolio/`, // DonтАЩt make this a variable
true, // Whether or not to check subdirectories
/^.*\.(svg|png|gif|jpg|jpeg|webp|)$/ // Rough regex for extensions, maybe change this for your use case?
)
return (
<ol>
{pages.map(function(page, i) {
let path = page.node.frontmatter.featured_image.relativePath
let imgPath = `./${path.split('portfolio/')[1]}`
return (
<li key={`Item_${page.node.fields.slug}`}>
<Link to={page.node.fields.slug}>
<img src={requireFeatureImage(imgPath)} />
<h2>
{page.node.frontmatter.title}
</h2>
</Link>
</li>
)
})}
</ol>
)
рд╡реЗрдмрдкреИрдХ 2 рдХреЗ рд╕рд╛рде require.context
рдХреЗ рд▓рд┐рдП рдбреЙрдХреНрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕рдордЭрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╕ рдирд╣реАрдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ред рднрд▓реЗ рд╣реА, рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЧреИрдЯреНрд╕рдмреА рдореБрджреНрджрд╛ рдЗрддрдирд╛ рдЕрдзрд┐рдХ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡реЗрдмрдкреИрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдХреНрд╖рдорд╛ рдХрд░реЗрдВ)ред
@KyleAMathews рдХреНрдпрд╛ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдореБрдЭреЗ рдбреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╛ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг/рдмреЗрд╣рддрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдпрд╛рдж рдХрд┐рдпрд╛? рдзрдиреНрдпрд╡рд╛рдж!
рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рднрд╛рдЧ 5 рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмреАрдЪ, www рдФрд░ gatsbygram рдЪреЗрдХрдЖрдЙрдЯ рдХрд░реЗрдВ рдЬреИрд╕реЗ https://github.com/gatsbyjs/gatsby/blob/66e86d4b45dad70bfcf78861002e0108863f7985/www/src/pages/index.js#L209
рдпрджрд┐ рдЖрдк https://www.gatsbyjs.org/packages/gatsby-transformer-sharp/ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдлреНрд░рдВрдЯрдореИрдЯрд░ рдореЗрдВ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рдЫрд╡рд┐рдпрд╛рдВ рдлрд┐рд░ рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрддреА рд╣реИрдВред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореИрдВ рдЧреВрдЧрд▓
рдФрд░ рдЕрдВрдд рдореЗрдВ рдпрд╣ https://webpack.github.io/docs/context.html рдкрд╛рдпрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗрдмрдкреИрдХ рдбрд╛рдпрдирд╛рдорд┐рдХ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж
рдФрд░ рдЕрдм рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред