Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Path handling error: when running --serve on a site generated into a folder in parent folder #939

Open
aral opened this issue Feb 15, 2020 · 2 comments
Labels
feature: 🗂 file paths Related to how Eleventy normalizes paths on the file system needs-triage

Comments

@aral
Copy link

aral commented Feb 15, 2020

Eleventy’s server (--serve) fails to launch when --input is the current directory and --output is a directory in the parent directory. (Compilation – i.e., write() – and --watch succeed.)

In this particular instance, the failure (see debug log) appears to be because scandir is trying to scan all the folders in the parent directory and it doesn’t have privileges to do so (and it shouldn’t be anyway).

To Reproduce

  1. Install Eleventy.

    npm i -g @11ty/eleventy`
  2. Create a new parent directory and change the current working directory to it.

    mkdir parent-dir
    cd parent-dir
  3. Clone the base blog example.

    git clone https://github.com/11ty/eleventy-base-blog.git
  4. Change to the base blog example’s directory and install its dependencies

     cd eleventy-base-blog
     npm i
  5. Run Eleventy.

    eleventy --input=. --output=../eleventy-base-blog-site

What should happen

Eleventy should compile the source in ./ and output it to /.eleventy-base-blog-site.

What actually happens

The following error is triggered (compiler output truncated; full debug output at end):

…
Writing ../eleventy-base-blog-site/tags/another-tag/index.html from ./tags.njk.
Copied 2 items / Wrote 16 files in 0.24 seconds (15.0ms each, v0.10.0)
Watching…
[Browsersync] Access URLs:
 -----------------------------------
    Local: http://localhost:8080
 External: http://192.168.2.134:8080
 -----------------------------------
[Browsersync] Serving files from: ../eleventy-base-blog-site
Uncaught exception: (more in DEBUG output)
> ENOENT: no such file or directory, open '_site/404.html'

`Error` was thrown:
    Error: ENOENT: no such file or directory, open '_site/404.html'
        at Object.openSync (fs.js:440:3)
        at Object.readFileSync (fs.js:342:35)
        at Object.ready (/home/aral/empty-sandbox/eleventy-base-blog/.eleventy.js:57:32)
        at BrowserSync.callback (/home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/browser-sync.js:51:12)
        at /home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/browser-sync.js:228:12
        at /home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/utils.js:278:21
        at executeTask (/home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/browser-sync.js:136:13)
        at Object.initUserPlugins [as fn] (/home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/async.js:294:9)
        at /home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/browser-sync.js:120:14
        at iterate (/home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/utils.js:269:9)

Environment:

  • OS and Version: Pop!_OS 19.10 (based on Ubuntu 19.10)
  • Eleventy Version: 0.10.0

Additional context

Full debug output (sans timings):

  Eleventy:UserConfig Resetting EleventyConfig to initial values. +0ms
  Eleventy:Config Setting up global TemplateConfig. +0ms
  Eleventy:UserConfig Adding universal filter 'slug' +3ms
  Eleventy:UserConfig Adding universal filter 'url' +1ms
  Eleventy:TemplateConfig rootConfig { templateFormats: [ 'liquid',   'ejs', 'md',       'hbs', 'mustache', 'haml', 'pug',      'njk', 'html',     'jstl', '11ty.js' ], pathPrefix: '/', markdownTemplateEngine: 'liquid', htmlTemplateEngine: 'liquid', dataTemplateEngine: 'liquid', passthroughFileCopy: true, htmlOutputSuffix: '-o', jsDataFileSuffix: '.11tydata', keys: { package: 'pkg', layout: 'layout', permalink: 'permalink', permalinkRoot: 'permalinkBypassOutputDir', engineOverride: 'templateEngineOverride' }, dir: { input: '.', includes: '_includes', data: '_data', output: '_site' }, filters: {}, handlebarsHelpers: {}, nunjucksFilters: {} } +0ms
  Eleventy:TemplateConfig Merging config with /home/aral/empty-sandbox/eleventy-base-blog/.eleventy.js +2ms
  Eleventy:UserConfig Adding plugin (unknown name: check your config file). +37ms
  Eleventy:UserConfig Adding plugin (unknown name: check your config file). +0ms
  Eleventy:UserConfig Adding plugin (unknown name: check your config file). +0ms
  Eleventy:UserConfig Adding universal filter 'readableDate' +0ms
  Eleventy:UserConfig Adding universal filter 'htmlDateString' +0ms
  Eleventy:UserConfig Adding universal filter 'head' +0ms
  Eleventy:TemplateConfig localConfig: { templateFormats: [ 'md', 'njk', 'html', 'liquid' ], markdownTemplateEngine: 'liquid', htmlTemplateEngine: 'njk', dataTemplateEngine: 'njk', dir: { input: '.', includes: '_includes', data: '_data', output: '_site' }, filters: {}, linters: {}, layoutAliases: { post: 'layouts/post.njk' }, passthroughCopies: { img: true, css: true }, liquidOptions: {}, liquidTags: { highlight: [Function] }, liquidFilters: { slug: [Function], url: [Function], readableDate: [Function], htmlDateString: [Function], head: [Function] }, liquidShortcodes: {}, liquidPairedShortcodes: {}, nunjucksFilters: { slug: [Function], url: [Function], rssLastUpdatedDate: [Function], rssDate: [Function], absoluteUrl: [Function], eleventyNavigation: [Function], eleventyNavigationBreadcrumb: [Function], eleventyNavigationToHtml: [Function], readableDate: [Function], htmlDateString: [Function], head: [Function] }, nunjucksAsyncFilters: { htmlToAbsoluteUrls: [Function] }, nunjucksTags: {}, nunjucksAsyncShortcodes: {}, nunjucksShortcodes: {}, nunjucksAsyncPairedShortcodes: {}, nunjucksPairedShortcodes: { highlight: [Function] }, handlebarsHelpers: { slug: [Function], url: [Function], readableDate: [Function], htmlDateString: [Function], head: [Function] }, handlebarsShortcodes: {}, handlebarsPairedShortcodes: {}, javascriptFunctions: { slug: [Function], url: [Function], readableDate: [Function], htmlDateString: [Function], head: [Function] }, pugOptions: {}, ejsOptions: {}, markdownHighlighter: [Function], libraryOverrides: { md: MarkdownIt { inline: [ParserInline], block: [ParserBlock], core: [Core], renderer: [Renderer], linkify: [LinkifyIt], validateLink: [Function: validateLink], normalizeLink: [Function: normalizeLink], normalizeLinkText: [Function: normalizeLinkText], utils: [Object], helpers: [Object], options: [Object] } }, dynamicPermalinks: true, useGitIgnore: true, dataDeepMerge: true, experiments: Set {}, watchJavaScriptDependencies: true, additionalWatchTargets: [], browserSyncConfig: { callbacks: { ready: [Function: ready] }, ui: false, ghostMode: false }, frontMatterParsingOptions: undefined, dataExtensions: Map {}, quietMode: false } +39ms
  Eleventy:TemplateConfig overrides: {} +1ms
  Eleventy:TemplateConfig Current configuration: { templateFormats: [ 'md', 'njk', 'html', 'liquid' ], pathPrefix: '/', markdownTemplateEngine: 'liquid', htmlTemplateEngine: 'njk', dataTemplateEngine: 'njk', passthroughFileCopy: true, htmlOutputSuffix: '-o', jsDataFileSuffix: '.11tydata', keys: { package: 'pkg', layout: 'layout', permalink: 'permalink', permalinkRoot: 'permalinkBypassOutputDir', engineOverride: 'templateEngineOverride' }, dir: { input: '.', includes: '_includes', data: '_data', output: '_site' }, filters: {}, handlebarsHelpers: { slug: [Function], url: [Function], readableDate: [Function], htmlDateString: [Function], head: [Function] }, nunjucksFilters: { slug: [Function], url: [Function], rssLastUpdatedDate: [Function], rssDate: [Function], absoluteUrl: [Function], eleventyNavigation: [Function], eleventyNavigationBreadcrumb: [Function], eleventyNavigationToHtml: [Function], readableDate: [Function], htmlDateString: [Function], head: [Function] }, linters: {}, layoutAliases: { post: 'layouts/post.njk' }, passthroughCopies: { img: true, css: true }, liquidOptions: {}, liquidTags: { highlight: [Function] }, liquidFilters: { slug: [Function], url: [Function], readableDate: [Function], htmlDateString: [Function], head: [Function] }, liquidShortcodes: {}, liquidPairedShortcodes: {}, nunjucksAsyncFilters: { htmlToAbsoluteUrls: [Function] }, nunjucksTags: {}, nunjucksAsyncShortcodes: {}, nunjucksShortcodes: {}, nunjucksAsyncPairedShortcodes: {}, nunjucksPairedShortcodes: { highlight: [Function] }, handlebarsShortcodes: {}, handlebarsPairedShortcodes: {}, javascriptFunctions: { slug: [Function], url: [Function], readableDate: [Function], htmlDateString: [Function], head: [Function] }, pugOptions: {}, ejsOptions: {}, markdownHighlighter: [Function], libraryOverrides: { md: MarkdownIt { inline: [ParserInline], block: [ParserBlock], core: [Core], renderer: [Renderer], linkify: [LinkifyIt], validateLink: [Function: validateLink], normalizeLink: [Function: normalizeLink], normalizeLinkText: [Function: normalizeLinkText], utils: [Object], helpers: [Object], options: [Object] } }, dynamicPermalinks: true, useGitIgnore: true, dataDeepMerge: true, experiments: Set {}, watchJavaScriptDependencies: true, additionalWatchTargets: [], browserSyncConfig: { callbacks: { ready: [Function: ready] }, ui: false, ghostMode: false }, frontMatterParsingOptions: undefined, dataExtensions: Map {}, quietMode: false } +1ms
  Eleventy:CommandCheck command: eleventy  --input=. --output=../eleventy-base-blog-site --serve +0ms
  Eleventy:TemplatePassthroughManager Resetting counts to 0 +0ms
  Eleventy:EleventyFiles /home/aral/empty-sandbox/eleventy-base-blog/.gitignore ignoring: !./_site +0ms
  Eleventy:EleventyFiles /home/aral/empty-sandbox/eleventy-base-blog/.gitignore ignoring: !./node_modules/** +0ms
  Eleventy:EleventyFiles /home/aral/empty-sandbox/eleventy-base-blog/.gitignore ignoring: !./package-lock.json +0ms
  Eleventy:EleventyFiles /home/aral/empty-sandbox/eleventy-base-blog/.eleventyignore ignoring: !./README.md +0ms
  Eleventy:EleventyFiles /home/aral/empty-sandbox/eleventy-base-blog/.eleventyignore ignoring: !./_11ty/** +0ms
  Eleventy Directories:
  Eleventy Input: .
  Eleventy Data: _data
  Eleventy Includes: _includes
  Eleventy Layouts: undefined
  Eleventy Output: ../eleventy-base-blog-site
  Eleventy Template Formats: md,njk,html,liquid
  Eleventy Verbose Output: false +0ms
  Eleventy:TemplateData Found global data file ./_data/metadata.json and adding as: metadata +0ms
  Eleventy:EleventyFiles Searching for: [ './**/*.md', './**/*.njk', './**/*.html', './**/*.liquid', '!./_site', '!./node_modules/**', '!./package-lock.json', '!./README.md', '!./_11ty/**', '!../eleventy-base-blog-site/**', '!./_includes/**', '!./_data/**' ] +109ms
  Eleventy:TemplateWriter Found: [ './404.md', './archive.njk', './index.njk', './page-list.njk', './sitemap.xml.njk', './tags-list.njk', './tags.njk', './about/index.md', './feed/feed.njk', './feed/htaccess.njk', './posts/firstpost.md', './posts/fourthpost.md', './posts/secondpost.md', './posts/thirdpost.md' ] +0ms
  Eleventy:TemplatePassthroughManager TemplatePassthrough copy started. +115ms
  Eleventy:TemplatePassthroughManager `passthroughFileCopy` config paths: { img: true, css: true } +0ms
  Eleventy:TemplatePassthroughManager `passthroughFileCopy` config normalized paths: [ { inputPath: './img', outputPath: true }, { inputPath: './css', outputPath: true } ] +0ms
  Eleventy:TemplatePassthroughManager TemplatePassthrough copying from config: [object Object] +0ms
  Eleventy:TemplatePassthrough Copying './img' +0ms
  Eleventy:TemplatePassthroughManager TemplatePassthrough copying from config: [object Object] +1ms
  Eleventy:TemplatePassthrough Copying './css' +1ms
  Eleventy:TemplateData Using '.11tydata' to find data files. +107ms
  Eleventy:TemplateData getLocalDataPaths('./404.md'): [ './404.11tydata.js', './404.11tydata.json', './404.json' ] +0ms
  Eleventy:TemplateData Using '.11tydata' to find data files. +1ms
  Eleventy:TemplateData getLocalDataPaths('./archive.njk'): [ './archive.11tydata.js', './archive.11tydata.json', './archive.json' ] +0ms
  Eleventy:TemplateData Using '.11tydata' to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./index.njk'): [ './index.11tydata.js', './index.11tydata.json', './index.json' ] +0ms
  Eleventy:TemplateData Using '.11tydata' to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./page-list.njk'): [ './page-list.11tydata.js', './page-list.11tydata.json', './page-list.json' ] +0ms
  Eleventy:TemplateData Using '.11tydata' to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./sitemap.xml.njk'): [ './sitemap.xml.11tydata.js', './sitemap.xml.11tydata.json', './sitemap.xml.json' ] +0ms
  Eleventy:TemplateData Using '.11tydata' to find data files. +1ms
  Eleventy:TemplateData getLocalDataPaths('./tags-list.njk'): [ './tags-list.11tydata.js', './tags-list.11tydata.json', './tags-list.json' ] +0ms
  Eleventy:TemplateData Using '.11tydata' to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./tags.njk'): [ './tags.11tydata.js', './tags.11tydata.json', './tags.json' ] +0ms
  Eleventy:TemplateData Using '.11tydata' to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./about/index.md'): [ './about/index.11tydata.js', './about/index.11tydata.json', './about/index.json', './about/about.11tydata.js', './about/about.11tydata.json', './about/about.json' ] +0ms
  Eleventy:TemplateData Using '.11tydata' to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./feed/feed.njk'): [ './feed/feed.11tydata.js', './feed/feed.11tydata.json', './feed/feed.json', './feed/feed.11tydata.js', './feed/feed.11tydata.json', './feed/feed.json' ] +0ms
  Eleventy:TemplateData Using '.11tydata' to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./feed/htaccess.njk'): [ './feed/htaccess.11tydata.js', './feed/htaccess.11tydata.json', './feed/htaccess.json', './feed/feed.11tydata.js', './feed/feed.11tydata.json', './feed/feed.json' ] +1ms
  Eleventy:TemplateData Using '.11tydata' to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./posts/firstpost.md'): [ './posts/firstpost.11tydata.js', './posts/firstpost.11tydata.json', './posts/firstpost.json', './posts/posts.11tydata.js', './posts/posts.11tydata.json', './posts/posts.json' ] +0ms
  Eleventy:TemplateData Using '.11tydata' to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./posts/fourthpost.md'): [ './posts/fourthpost.11tydata.js', './posts/fourthpost.11tydata.json', './posts/fourthpost.json', './posts/posts.11tydata.js', './posts/posts.11tydata.json', './posts/posts.json' ] +0ms
  Eleventy:TemplateData Using '.11tydata' to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./posts/secondpost.md'): [ './posts/secondpost.11tydata.js', './posts/secondpost.11tydata.json', './posts/secondpost.json', './posts/posts.11tydata.js', './posts/posts.11tydata.json', './posts/posts.json' ] +0ms
  Eleventy:TemplateData Using '.11tydata' to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./posts/thirdpost.md'): [ './posts/thirdpost.11tydata.js', './posts/thirdpost.11tydata.json', './posts/thirdpost.json', './posts/posts.11tydata.js', './posts/posts.11tydata.json', './posts/posts.json' ] +0ms
  Eleventy:Template getMappedDate: using file created time for './sitemap.xml.njk' of 2020-02-15T12:27:23.583Z (from 1581769643583.9038) +0ms
  Eleventy:TemplateWriter ./sitemap.xml.njk added to map. +49ms
  Eleventy:Template getMappedDate: using file created time for './feed/feed.njk' of 2020-02-15T12:27:23.583Z (from 1581769643583.9038) +0ms
  Eleventy:TemplateWriter ./feed/feed.njk added to map. +0ms
  Eleventy:Template getMappedDate: using file created time for './feed/htaccess.njk' of 2020-02-15T12:27:23.583Z (from 1581769643583.9038) +5ms
  Eleventy:TemplateWriter ./feed/htaccess.njk added to map. +5ms
  Eleventy:TemplatePassthroughManager Copied './img' +57ms
  Eleventy:Template getMappedDate: using file created time for './archive.njk' of 2020-02-15T12:27:23.579Z (from 1581769643579.9038) +6ms
  Eleventy:TemplateWriter ./archive.njk added to map. +6ms
  Eleventy:Template getMappedDate: using file created time for './404.md' of 2020-02-15T12:27:23.579Z (from 1581769643579.9038) +0ms
  Eleventy:TemplateWriter ./404.md added to map. +1ms
  Eleventy:Template getMappedDate: using file created time for './index.njk' of 2020-02-15T12:27:23.579Z (from 1581769643579.9038) +1ms
  Eleventy:TemplateWriter ./index.njk added to map. +0ms
  Eleventy:Template getMappedDate: using file created time for './page-list.njk' of 2020-02-15T12:27:23.583Z (from 1581769643583.9038) +0ms
  Eleventy:TemplateWriter ./page-list.njk added to map. +0ms
  Eleventy:Template getMappedDate: using file created time for './tags-list.njk' of 2020-02-15T12:27:23.583Z (from 1581769643583.9038) +0ms
  Eleventy:TemplateWriter ./tags-list.njk added to map. +0ms
  Eleventy:TemplatePassthroughManager Copied './css' +4ms
  Eleventy:TemplatePassthroughManager TemplatePassthrough copy finished. Current count: 2 +0ms
  Eleventy:Template getMappedDate: using file created time for './tags.njk' of 2020-02-15T12:27:23.583Z (from 1581769643583.9038) +1ms
  Eleventy:TemplateWriter ./tags.njk added to map. +1ms
  Eleventy:Template getMappedDate: using a date in the data for './posts/firstpost.md' of 2018-05-01T00:00:00.000Z +1ms
  Eleventy:Template getMappedDate: YAML parsed it: 2018-05-01T00:00:00.000Z +0ms
  Eleventy:TemplateWriter ./posts/firstpost.md added to map. +1ms
  Eleventy:Template getMappedDate: using a date in the data for './posts/fourthpost.md' of 2018-09-30T00:00:00.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2018-09-30T00:00:00.000Z +0ms
  Eleventy:TemplateWriter ./posts/fourthpost.md added to map. +0ms
  Eleventy:Template getMappedDate: using a date in the data for './posts/secondpost.md' of 2018-07-04T00:00:00.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2018-07-04T00:00:00.000Z +0ms
  Eleventy:TemplateWriter ./posts/secondpost.md added to map. +0ms
  Eleventy:Template getMappedDate: using a date in the data for './posts/thirdpost.md' of 2018-08-24T00:00:00.000Z +1ms
  Eleventy:Template getMappedDate: YAML parsed it: 2018-08-24T00:00:00.000Z +0ms
  Eleventy:TemplateWriter ./posts/thirdpost.md added to map. +1ms
  Eleventy:Template getMappedDate: using file created time for './about/index.md' of 2020-02-15T12:27:23.583Z (from 1581769643583.9038) +0ms
  Eleventy:TemplateWriter ./about/index.md added to map. +0ms
  Eleventy:TemplateMap Caching collections objects. +0ms
  Eleventy:Template Rendering permalink for './archive.njk': /posts/ becomes '/posts/' +2ms
  Eleventy:Template Rendering permalink for './archive.njk': /posts/ becomes '/posts/' +1ms
  Eleventy:Template Rendering permalink for './tags-list.njk': /tags/ becomes '/tags/' +1ms
  Eleventy:Template Rendering permalink for './tags-list.njk': /tags/ becomes '/tags/' +1ms
  Eleventy:TemplateMap Collection: collections.all size: 8 +6ms
  Eleventy:Template Rendering permalink for './sitemap.xml.njk': /sitemap.xml becomes '/sitemap.xml' +1ms
  Eleventy:Template Rendering permalink for './sitemap.xml.njk': /sitemap.xml becomes '/sitemap.xml' +1ms
  Eleventy:Template Rendering permalink for './feed/feed.njk': feed/feed.xml becomes 'feed/feed.xml' +0ms
  Eleventy:Template Rendering permalink for './feed/feed.njk': feed/feed.xml becomes 'feed/feed.xml' +1ms
  Eleventy:Template Rendering permalink for './feed/htaccess.njk': feed/.htaccess becomes 'feed/.htaccess' +1ms
  Eleventy:Template Rendering permalink for './feed/htaccess.njk': feed/.htaccess becomes 'feed/.htaccess' +1ms
  Eleventy:Template Rendering permalink for './404.md': 404.html becomes '404.html' +14ms
  Eleventy:Template Rendering permalink for './404.md': 404.html becomes '404.html' +2ms
  Eleventy:TemplateMap Collection: collections.posts size: 4 +20ms
  Eleventy:TemplateMap Collection: collections.another-tag size: 1 +0ms
  Eleventy:TemplateMap Collection: collections.second-tag size: 2 +0ms
  Eleventy:TemplateMap Collection: collections.number-2 size: 1 +0ms
  Eleventy:TemplateMap Collection: collections.all size: 8 +0ms
  Eleventy:TemplateMap Collection: collections.tagList size: 3 +1ms
  Eleventy:TemplateData Using '.11tydata' to find data files. +87ms
  Eleventy:TemplateData getLocalDataPaths('./tags.njk'): [ './tags.11tydata.js', './tags.11tydata.json', './tags.json' ] +0ms
  Eleventy:Template getMappedDate: using file created time for './tags.njk' of 2020-02-15T12:27:23.583Z (from 1581769643583.9038) +3ms
  Eleventy:Template Rendering permalink for './tags.njk': /tags/{{ tag }}/ becomes '/tags/another-tag/' +2ms
  Eleventy:Template Rendering permalink for './tags.njk': /tags/{{ tag }}/ becomes '/tags/another-tag/' +0ms
  Eleventy:TemplateData Using '.11tydata' to find data files. +4ms
  Eleventy:TemplateData getLocalDataPaths('./tags.njk'): [ './tags.11tydata.js', './tags.11tydata.json', './tags.json' ] +0ms
  Eleventy:Template getMappedDate: using file created time for './tags.njk' of 2020-02-15T12:27:23.583Z (from 1581769643583.9038) +2ms
  Eleventy:Template Rendering permalink for './tags.njk': /tags/{{ tag }}/ becomes '/tags/second-tag/' +1ms
  Eleventy:Template Rendering permalink for './tags.njk': /tags/{{ tag }}/ becomes '/tags/second-tag/' +1ms
  Eleventy:TemplateData Using '.11tydata' to find data files. +3ms
  Eleventy:TemplateData getLocalDataPaths('./tags.njk'): [ './tags.11tydata.js', './tags.11tydata.json', './tags.json' ] +1ms
  Eleventy:Template getMappedDate: using file created time for './tags.njk' of 2020-02-15T12:27:23.583Z (from 1581769643583.9038) +4ms
  Eleventy:Template Rendering permalink for './tags.njk': /tags/{{ tag }}/ becomes '/tags/number-2/' +1ms
  Eleventy:Template Rendering permalink for './tags.njk': /tags/{{ tag }}/ becomes '/tags/number-2/' +1ms
  Eleventy:Template Rendering permalink for './tags.njk': /tags/{{ tag }}/ becomes '/tags/another-tag/' +2ms
  Eleventy:Template Rendering permalink for './tags.njk': /tags/{{ tag }}/ becomes '/tags/another-tag/' +1ms
  Eleventy:Template rendering data.renderData for './tags.njk' +0ms
  Eleventy:Template Rendering permalink for './tags.njk': /tags/{{ tag }}/ becomes '/tags/another-tag/' +6ms
  Eleventy:Template Rendering permalink for './tags.njk': /tags/{{ tag }}/ becomes '/tags/another-tag/' +1ms
  Eleventy:Template Rendering permalink for './tags.njk': /tags/{{ tag }}/ becomes '/tags/second-tag/' +2ms
  Eleventy:Template Rendering permalink for './tags.njk': /tags/{{ tag }}/ becomes '/tags/second-tag/' +1ms
  Eleventy:Template rendering data.renderData for './tags.njk' +0ms
  Eleventy:Template Rendering permalink for './tags.njk': /tags/{{ tag }}/ becomes '/tags/second-tag/' +1ms
  Eleventy:Template Rendering permalink for './tags.njk': /tags/{{ tag }}/ becomes '/tags/second-tag/' +1ms
  Eleventy:Template Rendering permalink for './tags.njk': /tags/{{ tag }}/ becomes '/tags/number-2/' +2ms
  Eleventy:Template Rendering permalink for './tags.njk': /tags/{{ tag }}/ becomes '/tags/number-2/' +1ms
  Eleventy:Template rendering data.renderData for './tags.njk' +0ms
  Eleventy:Template Rendering permalink for './tags.njk': /tags/{{ tag }}/ becomes '/tags/number-2/' +1ms
  Eleventy:Template Rendering permalink for './tags.njk': /tags/{{ tag }}/ becomes '/tags/number-2/' +1ms
  Eleventy:TemplateMap Collection: collections.all size: 11 +34ms
  Eleventy:TemplateData Using '.11tydata' to find data files. +27ms
  Eleventy:TemplateData getLocalDataPaths('./page-list.njk'): [ './page-list.11tydata.js', './page-list.11tydata.json', './page-list.json' ] +0ms
  Eleventy:Template getMappedDate: using file created time for './page-list.njk' of 2020-02-15T12:27:23.583Z (from 1581769643583.9038) +4ms
  Eleventy:Template Rendering permalink for './page-list.njk': /page-list/{% if pagination.pageNumber > 0 %}{{ pagination.pageNumber }}/{% endif %} becomes '/page-list/' +4ms
  Eleventy:Template Rendering permalink for './page-list.njk': /page-list/{% if pagination.pageNumber > 0 %}{{ pagination.pageNumber }}/{% endif %} becomes '/page-list/' +3ms
  Eleventy:Template Rendering permalink for './page-list.njk': /page-list/{% if pagination.pageNumber > 0 %}{{ pagination.pageNumber }}/{% endif %} becomes '/page-list/' +1ms
  Eleventy:Template Rendering permalink for './page-list.njk': /page-list/{% if pagination.pageNumber > 0 %}{{ pagination.pageNumber }}/{% endif %} becomes '/page-list/' +1ms
  Eleventy:Template Rendering permalink for './page-list.njk': /page-list/{% if pagination.pageNumber > 0 %}{{ pagination.pageNumber }}/{% endif %} becomes '/page-list/' +2ms
  Eleventy:Template Rendering permalink for './page-list.njk': /page-list/{% if pagination.pageNumber > 0 %}{{ pagination.pageNumber }}/{% endif %} becomes '/page-list/' +1ms
  Eleventy:TemplateMap Collection: collections.all size: 12 +17ms
  Eleventy:TemplateWriter Template map created. +156ms
  Eleventy:Template Writing '../eleventy-base-blog-site/sitemap.xml' from './sitemap.xml.njk'. +80ms
  Eleventy:Template Writing '../eleventy-base-blog-site/feed/feed.xml' from './feed/feed.njk'. +0ms
  Eleventy:Template Writing '../eleventy-base-blog-site/feed/.htaccess' from './feed/htaccess.njk'. +0ms
  Eleventy:Template Writing '../eleventy-base-blog-site/posts/index.html' from './archive.njk'. +56ms
  Eleventy:Template Writing '../eleventy-base-blog-site/404.html' from './404.md'. +0ms
  Eleventy:Template Writing '../eleventy-base-blog-site/index.html' from './index.njk'. +0ms
  Eleventy:Template Writing '../eleventy-base-blog-site/page-list/index.html' from './page-list.njk'. +1ms
  Eleventy:Template Writing '../eleventy-base-blog-site/tags/index.html' from './tags-list.njk'. +0ms
  Eleventy:Template Writing '../eleventy-base-blog-site/tags/another-tag/index.html' from './tags.njk'. +0ms
  Eleventy:Template Writing '../eleventy-base-blog-site/posts/firstpost/index.html' from './posts/firstpost.md'. +0ms
  Eleventy:Template Writing '../eleventy-base-blog-site/posts/fourthpost/index.html' from './posts/fourthpost.md'. +0ms
  Eleventy:Template Writing '../eleventy-base-blog-site/posts/secondpost/index.html' from './posts/secondpost.md'. +1ms
  Eleventy:Template Writing '../eleventy-base-blog-site/posts/thirdpost/index.html' from './posts/thirdpost.md'. +0ms
  Eleventy:Template Writing '../eleventy-base-blog-site/about/index.html' from './about/index.md'. +0ms
  Eleventy:Template Writing '../eleventy-base-blog-site/tags/second-tag/index.html' from './tags.njk'. +0ms
  Eleventy:Template Writing '../eleventy-base-blog-site/tags/number-2/index.html' from './tags.njk'. +1ms
  Eleventy:Template ../eleventy-base-blog-site/feed/.htaccess written.. +1ms
  Eleventy:Template ../eleventy-base-blog-site/sitemap.xml written.. +0ms
  Eleventy:Template ../eleventy-base-blog-site/feed/feed.xml written.. +1ms
  Eleventy:Template ../eleventy-base-blog-site/posts/index.html written.. +0ms
  Eleventy:Template ../eleventy-base-blog-site/index.html written.. +0ms
  Eleventy:Template ../eleventy-base-blog-site/404.html written.. +0ms
  Eleventy:Template ../eleventy-base-blog-site/tags/index.html written.. +0ms
  Eleventy:Template ../eleventy-base-blog-site/page-list/index.html written.. +0ms
  Eleventy:Template ../eleventy-base-blog-site/tags/another-tag/index.html written.. +0ms
  Eleventy:Template ../eleventy-base-blog-site/posts/fourthpost/index.html written.. +0ms
  Eleventy:Template ../eleventy-base-blog-site/posts/firstpost/index.html written.. +0ms
  Eleventy:Template ../eleventy-base-blog-site/posts/secondpost/index.html written.. +0ms
  Eleventy:Template ../eleventy-base-blog-site/posts/thirdpost/index.html written.. +0ms
  Eleventy:Template ../eleventy-base-blog-site/about/index.html written.. +0ms
  Eleventy:Template ../eleventy-base-blog-site/tags/second-tag/index.html written.. +0ms
  Eleventy:Template ../eleventy-base-blog-site/tags/number-2/index.html written.. +0ms
Copied 2 items / Wrote 16 files in 0.40 seconds (25.0ms each, v0.10.0)
  Eleventy Finished writing templates. +396ms
  Eleventy 
  Eleventy Getting frustrated? Have a suggestion/feature request/feedback?
  Eleventy I want to hear it! Open an issue: https://github.com/11ty/eleventy/issues/new +0ms
  Eleventy:TemplatePassthroughManager `passthroughFileCopy` config paths: { img: true, css: true } +221ms
  Eleventy:TemplatePassthroughManager `passthroughFileCopy` config normalized paths: [ { inputPath: './img', outputPath: true }, { inputPath: './css', outputPath: true } ] +0ms
  Eleventy Watching for changes to: [ './**/*.md', './**/*.njk', './**/*.html', './**/*.liquid', './_includes/**', './_data/**', './img/**', './css/**', './.eleventy.js', './**/*.json', './**/*.11tydata.js', './_11ty/getTagList.js' ] +4ms
  Eleventy Ignoring watcher changes to: [ '_site', 'node_modules/**', 'package-lock.json', 'README.md', '_11ty/**', '../eleventy-base-blog-site/**' ] +0ms
Watching…
[Browsersync] Access URLs:
 -----------------------------------
    Local: http://localhost:8080
 External: http://192.168.2.134:8080
 -----------------------------------
[Browsersync] Serving files from: ../eleventy-base-blog-site
  Eleventy:EleventyErrorHandler Uncaught exception: +0ms
  Eleventy:EleventyErrorHandler ENOENT: no such file or directory, open '_site/404.html'
  Eleventy:EleventyErrorHandler 
  Eleventy:EleventyErrorHandler `Error` was thrown: +0ms
  Eleventy:EleventyErrorHandler (error stack): Error: ENOENT: no such file or directory, open '_site/404.html'
  Eleventy:EleventyErrorHandler     at Object.openSync (fs.js:440:3)
  Eleventy:EleventyErrorHandler     at Object.readFileSync (fs.js:342:35)
  Eleventy:EleventyErrorHandler     at Object.ready (/home/aral/empty-sandbox/eleventy-base-blog/.eleventy.js:57:32)
  Eleventy:EleventyErrorHandler     at BrowserSync.callback (/home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/browser-sync.js:51:12)
  Eleventy:EleventyErrorHandler     at /home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/browser-sync.js:228:12
  Eleventy:EleventyErrorHandler     at /home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/utils.js:278:21
  Eleventy:EleventyErrorHandler     at executeTask (/home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/browser-sync.js:136:13)
  Eleventy:EleventyErrorHandler     at Object.initUserPlugins [as fn] (/home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/async.js:294:9)
  Eleventy:EleventyErrorHandler     at /home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/browser-sync.js:120:14
  Eleventy:EleventyErrorHandler     at iterate (/home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/utils.js:269:9) +0ms
^C  Eleventy Cleaning up chokidar and browsersync (if exists) instances. +3s
@Ryuno-Ki
Copy link
Contributor

Hm, couldn't it be a security risk to allow eleventy to point to directories above it's own?

@aral
Copy link
Author

aral commented Mar 11, 2020

I’m no longer evaluating eleventy due to this (incorporated Hugo instead) so please feel free to close this if you don’t consider it an issue.

@zachleat zachleat added the feature: 🗂 file paths Related to how Eleventy normalizes paths on the file system label Jun 29, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature: 🗂 file paths Related to how Eleventy normalizes paths on the file system needs-triage
3 participants