A Metalsmith plugin to load files from paths added to frontmatter.
You could then use metalsmith-frontmatter-renderer to render the loaded data into html.
$ npm install metalsmith-frontmatter-file-loader
You can pass some basic options to customize the behaviour:
keyis the key of the object to iterate over in the files frontmatter. Default
outis the key of the object to update the values upon. Default the value of
suppressNoFilesErroris a boolean to determine the behaviour when there are no files to load. Set to
trueto prevent an error being thrown if there are no files to load. Default
allowMissingFilesis a boolean to determine the behaviour when a file fails to load. Set to
trueto prevent an error being thrown if a file is missing or cannot be read as a utf-8 string. If a file fails to load then it will replace the value with an empty string. Default
Install via npm and then add the
metalsmith-frontmatter-file-loader key to your
or with configuration options:
options to the plugin and pass it to Metalsmith with the
var fmfl = ;metalsmith;
——— files: foo: './files/foo.txt' bar: './files/bar.md' ——— <h1>This is the <code>contents</code> of the file.</h1>
By default this would load the contents of
./files/foo.txt (relative to the metalsmith root, not the file containing the frontmatter) and replace the path with the file contents. Then it would do the same for
./files/bar.md. It doesn't do any conversion of the data but you can use metalsmith-frontmatter-renderer if you desire this behaviour.
e.g this is the equivalent of having written out the file contents into the frontmatter as so:
——— files: foo: 'This is the text content of ./files/foo.txt!' bar: 'This is the *markdown* content of `./files/bar.md` :)' ——— <h1>This is the <code>contents</code> of the file.</h1>
If you use a property other than
files then you can pass the name as a configuration option. See the config documentation above.