TypeScript icon, indicating that this package has built-in type declarations

2.0.1 • Public • Published


This package is a markdown postprocessor which is meant to help with creating and maintain markdown files which contain the content other files as code blocks.


You just write your markdown and put placeholder where you want to put other files content.

The overwrite / create behavior is driven by a internal ruleset which is based on the input filenames. If your file is named template.*.md this tool will create a corresponding *.md which is handy if you only want to include the * file into your code repository. If you list a file which does not fit this pattern it will replace this file with the generated version.

The full syntax is

 <!-- USEFILE: <filename>[; <custom js preprocessor>] -->

Remove the leading space before the <!--.

The preprocessor, codeblock and language tag are optional, if you provide no language tag, the file extension will be use.


This is an example of the usage of this package with the * naming.

# This is an example file
<!-- USEFILE: test.txt -->
This is some other text.
This tool will infer the type of the inserted code from the file ending, if you explicitly add a code block it will use the given type.
<!-- USEFILE: test.txt -->```js```
<!-- USEFILE: test.txt; str => str.replace('text', 'other text') -->

You can find this in example\

Which results in

# This is an example file
<!-- USEFILE: test.txt -->
``` txt
This is some text!
*You can find this in `test.txt`*
This is some other text.
This tool will infer the type of the inserted code from the file ending, if you explicitly add a code block it will use the given type.
<!-- USEFILE: test.txt -->``` js
This is some text!
*You can find this in `test.txt`*
<!-- USEFILE: test.txt; str => str.replace('text', 'other text') -->``` txt
This is some other text!
*You can find this in `test.txt`*

You can find this in example\

Actually this README uses the template alternative.


You can provide custom processors which will be called on each code block inserted. There are three ways to define those.

  1. One is to attach them to the comment block, like so: <!-- USEFILE: ./some-path.js; str => str.slice(0, 20)--> (have a look at the where this is also used).
  2. Another is to provided it with the --preprocessor CLI option (see below).
  3. The last one is to provide a file path with the --preprocessorPath CLI option (see below).

They will be called in this order. In each case the function has the following signature:

interface Processor {
    snippet: string,
    inputPath: string,
    outputPath: string,
    replacePath: string
  ): string;

You can find this in index.ts


This CLI is exposed in with two command names insert-filecontent-into-markdown and ifim as a shortcut.

This package provides the following command line options:


This command will lookup and process it according to the rules stated above.

insert-filecontent-into-markdown --add-location-notice

This will insert a notice (like the one you can see above) at the bottom of the inserted codeblocks. You should add an -- before your files if you have any files beginning with - or --.

insert-filecontent-into-markdown --preprocess "str => str.replace('str', 'another str')"

You can provide a custom preprocessor which will be called for each string which is inserted into the file.

You can provide this option multiple time, in which case each processor will be called in the specified order.

insert-filecontent-into-markdown --preprocessPath "./my-preproc-file"

You can also put your preprocessor into a file. This file will be require() and the returned value will be used as processor you you should default export your function like so module.exports = str => str.replace('str', 'another str').

You can provide this option multiple time, in which case each processor will be called in the specified order but after the specified --preprocess preprocessor.

insert-filecontent-into-markdown --add-location-notice --paths '[["test.x","test.y"]]'

This allows you to define additional file inputs with their file output. The value passed for paths has to be a two dimensional array, in which you provide arrays with the length of two, where the first element is the source file and the second is the destination file.

using this to insert markdown into markdown

Ironically this package has a caveat for markdown insertions. Use this with caution if your inserted markdown contains code blocks (```) and you are using the replacing approach.




Package Sidebar


npm i insert-filecontent-into-markdown

Weekly Downloads






Unpacked Size

14.9 kB

Total Files


Last publish


  • feirell