Create the app:
create-next-app myapp
Install the CodeMirror dependencies:
npm install react-codemirror2 codemirror @zeit/next-css css-loader --save
components/code-with-codemirror.js
import React, { Component } from 'react'
import {UnControlled as CodeMirror} from 'react-codemirror2'
import 'codemirror/mode/javascript/javascript'
import 'codemirror/lib/codemirror.css'
import 'codemirror/theme/material.css'
export default (props) => (
<div>
<CodeMirror
{...props}
value={props.value}
options={{theme: 'material', mode: 'javascript'}}
onChange={() => null}
/>
</div>
)
const withCSS = require('@zeit/next-css')
module.exports = withCSS({
webpack: (config) => {
// Fixes npm packages that depend on `fs` module
config.node = {
fs: 'empty'
}
return config
}
})
To use this component, use a dynamic import with ssr
set to false
:
import dynamic from 'next/dynamic'
const CodeWithCodemirror = dynamic(import('../components/code-with-codemirror'), {ssr: false})
export default () => {
return (
<div>
<CodeWithCodemirror value={"for (var i=0; i < 10; i++) {\n console.log(i)\n}"} />
</div>
)
}