init
This commit is contained in:
parent
e80c3b2298
commit
907845feb1
27 changed files with 11082 additions and 0 deletions
27
packages/create-freesewing-pattern/.eslintrc
Normal file
27
packages/create-freesewing-pattern/.eslintrc
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"parser": "babel-eslint",
|
||||||
|
"extends": [
|
||||||
|
"standard",
|
||||||
|
"standard-react"
|
||||||
|
],
|
||||||
|
"env": {
|
||||||
|
"es6": true
|
||||||
|
},
|
||||||
|
"plugins": [
|
||||||
|
"react"
|
||||||
|
],
|
||||||
|
"parserOptions": {
|
||||||
|
"sourceType": "module",
|
||||||
|
"allowImportExportEverywhere": true
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
// don't force es6 functions to include space before paren
|
||||||
|
"space-before-function-paren": 0,
|
||||||
|
|
||||||
|
// allow specifying true explicitly for boolean props
|
||||||
|
"react/jsx-boolean-value": 0,
|
||||||
|
|
||||||
|
// allow imports mixed with non-import statements at top of file
|
||||||
|
"import/first": 0
|
||||||
|
}
|
||||||
|
}
|
20
packages/create-freesewing-pattern/.gitignore
vendored
Normal file
20
packages/create-freesewing-pattern/.gitignore
vendored
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
# See https://help.github.com/ignore-files/ for more about ignoring files.
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
node_modules
|
||||||
|
|
||||||
|
# builds
|
||||||
|
build
|
||||||
|
dist
|
||||||
|
|
||||||
|
# misc
|
||||||
|
.DS_Store
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
.env.development.local
|
||||||
|
.env.test.local
|
||||||
|
.env.production.local
|
||||||
|
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
107
packages/create-freesewing-pattern/README.md
Normal file
107
packages/create-freesewing-pattern/README.md
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
# react-modern-library-cli
|
||||||
|
|
||||||
|
> CLI for easily creating and publishing modern React modules with Rollup and example usage via create-react-app.
|
||||||
|
|
||||||
|
[](https://www.npmjs.com/package/react-modern-library-cli) [](https://standardjs.com)
|
||||||
|
|
||||||
|
## Intro
|
||||||
|
|
||||||
|
*Note*: Modern means modern as of March, 2018.. I'm sure everything will change in a month... :joy: :joy:
|
||||||
|
|
||||||
|
This is a super easy-to-use CLI version of this previously published [boilerplate](https://github.com/transitive-bullshit/react-modern-library-boilerplate), which you can read about in this [article](https://hackernoon.com/publishing-baller-react-modules-2b039d84bce7).
|
||||||
|
|
||||||
|
**The purpose of this CLI is to make publishing your own React components as simple as possible.**
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Support all modern JS language features for component development out of the box
|
||||||
|
- Build process to convert source to `umd` and `es` module formats for publishing to npm
|
||||||
|
- Comes with an `example` app using a standard [create-react-app](https://github.com/facebookincubator/create-react-app), serving 2 purposes
|
||||||
|
- Local, hot-reload server for developing your module
|
||||||
|
- Easily publishable to github pages so users can quickly play with your module
|
||||||
|
- Use [Rollup](https://rollupjs.org/) for build process and [Babel](https://babeljs.io/) for transpilation
|
||||||
|
- See the [blog post](https://hackernoon.com/publishing-baller-react-modules-2b039d84bce7) for an explanation of Rollup vs Webpack
|
||||||
|
- Allow the use of `npm` modules within your library, either as dependencies or peer-dependencies
|
||||||
|
- Support importing CSS in your components (with css modules enabled by default)
|
||||||
|
- Note that CSS support will be a noop if you're using css-in-js
|
||||||
|
- Testing with [Jest](https://facebook.github.io/jest/), using `react-scripts` from `create-react-app`
|
||||||
|
- Sourcemap creation enabled by default
|
||||||
|
- Thorough documentation written by someone who cares :heart_eyes:
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install -g react-modern-library-cli
|
||||||
|
```
|
||||||
|
|
||||||
|
## Creating a New Module
|
||||||
|
|
||||||
|
```bash
|
||||||
|
react-modern-library-cli
|
||||||
|
```
|
||||||
|
|
||||||
|
After you answer some basic prompts about your module, the CLI will perform the following:
|
||||||
|
- copy over the template to a new folder in the current directory
|
||||||
|
- initialize yarn or npm package manager
|
||||||
|
- link packages together for development
|
||||||
|
- initialize local git repo
|
||||||
|
|
||||||
|
At this point, you're new module is all setup for local development.
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
#### Local Development
|
||||||
|
|
||||||
|
Local development is broken into two parts.
|
||||||
|
|
||||||
|
Note: if you're using yarn, you can skip the `yarn link` steps, as the generated module's example includes a local-link by default.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm start # runs rollup with watch flag => dist
|
||||||
|
```
|
||||||
|
|
||||||
|
The second part will be running our `example/` create-react-app that's linked to the local version of your module.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# (in another tab)
|
||||||
|
cd example
|
||||||
|
npm link <your-module-name> # you may skip this if using yarn
|
||||||
|
npm start # runs create-react-app dev server
|
||||||
|
```
|
||||||
|
|
||||||
|
Now, anytime you make a change to your component in `src/` or to the example app's `example/src`, `create-react-app` will live-reload your local dev server so you can iterate on your component in real-time.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### NPM Stuffs
|
||||||
|
|
||||||
|
The only difference when publishing your component to **npm** is to make sure you add any npm modules you want as peer dependencies are properly marked as `peerDependencies` in `package.json`. The rollup config will automatically recognize them as peer dependencies and not try to bundle them in your module.
|
||||||
|
|
||||||
|
Then publish as per usual.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# note this will build `commonjs` and `es`versions of your module to dist/
|
||||||
|
npm publish
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Github Pages
|
||||||
|
|
||||||
|
Deploying the example to github pages is simple. We create a production build of our example `create-react-app` that showcases your library and then run `gh-pages` to deploy the resulting bundle. This can be done as follows:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Multiple Named Exports
|
||||||
|
|
||||||
|
Here is a [branch](https://github.com/transitive-bullshit/react-modern-library-boilerplate/tree/feature/multiple-exports) which demonstrates how to use multiple named exports. The module in this branch exports two components, `Foo` and `Bar`, and shows how to use them from the example app.
|
||||||
|
|
||||||
|
### Material-UI
|
||||||
|
|
||||||
|
Here is a [branch](https://github.com/transitive-bullshit/react-modern-library-boilerplate/tree/feature/material-ui) which demonstrates how to make use of a relatively complicated peer dependency, [material-ui](https://github.com/mui-org/material-ui). It shows the power of [rollup-plugin-peer-deps-external](https://www.npmjs.com/package/rollup-plugin-peer-deps-external) which makes it a breeze to create reusable modules that include complicated material-ui subcomponents without having them bundled as a part of your module.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT © [Travis Fischer](https://github.com/transitive-bullshit)
|
50
packages/create-freesewing-pattern/index.js
Normal file
50
packages/create-freesewing-pattern/index.js
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
const meow = require('meow')
|
||||||
|
|
||||||
|
const getLibraryDefaults = require('./lib/get-library-defaults')
|
||||||
|
const createLibrary = require('./lib/create-library')
|
||||||
|
const promptLibraryInfo = require('./lib/prompt-library-info')
|
||||||
|
|
||||||
|
module.exports = async () => {
|
||||||
|
const defaults = await getLibraryDefaults()
|
||||||
|
const info = await promptLibraryInfo(defaults)
|
||||||
|
await createLibrary(info)
|
||||||
|
|
||||||
|
return info
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!module.parent) {
|
||||||
|
meow(`
|
||||||
|
Usage
|
||||||
|
$ react-modern-library-cli
|
||||||
|
`)
|
||||||
|
|
||||||
|
module.exports()
|
||||||
|
.then((info) => {
|
||||||
|
console.log(`
|
||||||
|
|
||||||
|
Your module has been created at ${info.dest}.
|
||||||
|
|
||||||
|
To get started, in one tab, run:
|
||||||
|
$ cd ${info.name} && ${info.manager} start
|
||||||
|
|
||||||
|
And in another tab, run the create-react-app devserver:
|
||||||
|
$ cd ${info.name}/example && ${info.manager} start
|
||||||
|
`)
|
||||||
|
|
||||||
|
if (info.manager === 'npm') {
|
||||||
|
console.log(`
|
||||||
|
|
||||||
|
Because you're using npm, you'll need to publish a dummy version of ${info.name} first before you can "npm link" your package into the example app.
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
|
||||||
|
process.exit(0)
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.error(err)
|
||||||
|
process.exit(1)
|
||||||
|
})
|
||||||
|
}
|
110
packages/create-freesewing-pattern/lib/create-library.js
Normal file
110
packages/create-freesewing-pattern/lib/create-library.js
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
const consolidate = require('consolidate')
|
||||||
|
const execa = require('execa')
|
||||||
|
const fs = require('fs')
|
||||||
|
const globby = require('globby')
|
||||||
|
const mkdirp = require('make-dir')
|
||||||
|
const ora = require('ora')
|
||||||
|
const path = require('path')
|
||||||
|
const pEachSeries = require('p-each-series')
|
||||||
|
|
||||||
|
const pkg = require('../package')
|
||||||
|
|
||||||
|
module.exports = async (info) => {
|
||||||
|
const {
|
||||||
|
dest,
|
||||||
|
manager
|
||||||
|
} = info
|
||||||
|
|
||||||
|
await mkdirp(dest)
|
||||||
|
|
||||||
|
const source = path.join(__dirname, '../template')
|
||||||
|
const files = await globby(source, {
|
||||||
|
dot: true
|
||||||
|
})
|
||||||
|
|
||||||
|
{
|
||||||
|
const promise = pEachSeries(files, async (file) => {
|
||||||
|
return module.exports.copyTemplateFile({
|
||||||
|
file,
|
||||||
|
source,
|
||||||
|
dest,
|
||||||
|
info
|
||||||
|
})
|
||||||
|
})
|
||||||
|
ora.promise(promise, `Copying template to ${dest}`)
|
||||||
|
await promise
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const promise = module.exports.initPackageManager({ dest, info })
|
||||||
|
ora.promise(promise, `Running ${manager} install and ${manager} link`)
|
||||||
|
await promise
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const promise = module.exports.initGitRepo({ dest })
|
||||||
|
ora.promise(promise, 'Initializing git repo')
|
||||||
|
await promise
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.copyTemplateFile = async (opts) => {
|
||||||
|
const {
|
||||||
|
file,
|
||||||
|
source,
|
||||||
|
dest,
|
||||||
|
info
|
||||||
|
} = opts
|
||||||
|
|
||||||
|
const fileRelativePath = path.relative(source, file)
|
||||||
|
const destFilePath = path.join(dest, fileRelativePath)
|
||||||
|
const destFileDir = path.parse(destFilePath).dir
|
||||||
|
|
||||||
|
const content = await consolidate.handlebars(file, info)
|
||||||
|
|
||||||
|
await mkdirp(destFileDir)
|
||||||
|
fs.writeFileSync(destFilePath, content, 'utf8')
|
||||||
|
|
||||||
|
return fileRelativePath
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.initPackageManager = async (opts) => {
|
||||||
|
const {
|
||||||
|
dest,
|
||||||
|
info
|
||||||
|
} = opts
|
||||||
|
|
||||||
|
const example = path.join(dest, 'example')
|
||||||
|
|
||||||
|
const commands = [
|
||||||
|
{
|
||||||
|
cmd: `${info.manager}`,
|
||||||
|
cwd: dest
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cmd: `${info.manager} link`,
|
||||||
|
cwd: dest
|
||||||
|
}
|
||||||
|
].concat(info.manager === 'yarn' ? [
|
||||||
|
{
|
||||||
|
cmd: `${info.manager}`,
|
||||||
|
cwd: example
|
||||||
|
}
|
||||||
|
] : [ ]
|
||||||
|
)
|
||||||
|
|
||||||
|
return pEachSeries(commands, async ({ cmd, cwd }) => {
|
||||||
|
return execa.shell(cmd, { cwd })
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.initGitRepo = async (opts) => {
|
||||||
|
const {
|
||||||
|
dest
|
||||||
|
} = opts
|
||||||
|
|
||||||
|
const cmd = `git init && git add . && git commit -m "init ${pkg.name}@${pkg.version}"`
|
||||||
|
return execa.shell(cmd, { cwd: dest })
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
const getGitConfigPath = require('git-config-path')
|
||||||
|
const githubUsername = require('github-username')
|
||||||
|
const parseGitConfig = require('parse-git-config')
|
||||||
|
const which = require('which')
|
||||||
|
|
||||||
|
module.exports = async () => {
|
||||||
|
const defaults = {
|
||||||
|
author: undefined,
|
||||||
|
manager: 'npm'
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const gitConfigPath = getGitConfigPath('global')
|
||||||
|
|
||||||
|
if (gitConfigPath) {
|
||||||
|
const gitConfig = parseGitConfig.sync({ path: gitConfigPath })
|
||||||
|
|
||||||
|
if (gitConfig.github && gitConfig.github.user) {
|
||||||
|
defaults.author = gitConfig.github.user
|
||||||
|
} else if (gitConfig.user && gitConfig.user.email) {
|
||||||
|
defaults.author = await githubUsername(gitConfig.user.email)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (which.sync('yarn', { nothrow: true })) {
|
||||||
|
defaults.manager = 'yarn'
|
||||||
|
}
|
||||||
|
} catch (err) { }
|
||||||
|
|
||||||
|
return defaults
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
const inquirer = require('inquirer')
|
||||||
|
const isValidNpmName = require('is-valid-npm-name')
|
||||||
|
const path = require('path')
|
||||||
|
|
||||||
|
module.exports = async (defaults) => {
|
||||||
|
const info = await inquirer.prompt([
|
||||||
|
{
|
||||||
|
type: 'input',
|
||||||
|
name: 'name',
|
||||||
|
message: 'Package Name',
|
||||||
|
validate: (name) => {
|
||||||
|
return name && name.length && isValidNpmName(name)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'input',
|
||||||
|
name: 'description',
|
||||||
|
message: 'Package Description',
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'input',
|
||||||
|
name: 'author',
|
||||||
|
message: 'Author\'s GitHub Handle',
|
||||||
|
default: defaults.author
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'input',
|
||||||
|
name: 'repo',
|
||||||
|
message: 'GitHub Repo Path',
|
||||||
|
default: (info) => `${info.author}/${info.name}`
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'input',
|
||||||
|
name: 'license',
|
||||||
|
message: 'License',
|
||||||
|
default: 'MIT'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'list',
|
||||||
|
name: 'manager',
|
||||||
|
message: 'Package Manager',
|
||||||
|
choices: [ 'npm', 'yarn' ],
|
||||||
|
default: defaults.manager
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
|
info.yarn = (info.manager === 'yarn')
|
||||||
|
info.dest = path.join(process.cwd(), info.name)
|
||||||
|
|
||||||
|
return info
|
||||||
|
}
|
24
packages/create-freesewing-pattern/package.json
Normal file
24
packages/create-freesewing-pattern/package.json
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
"name": "react-modern-library-cli",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "CLI for easily bootstrapping modern react libraries",
|
||||||
|
"main": "index.js",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"consolidate": "^0.15.0",
|
||||||
|
"cp-file": "^5.0.0",
|
||||||
|
"execa": "^0.9.0",
|
||||||
|
"git-config-path": "^1.0.1",
|
||||||
|
"github-username": "^4.1.0",
|
||||||
|
"globby": "^8.0.1",
|
||||||
|
"handlebars": "^4.0.11",
|
||||||
|
"inquirer": "^5.1.0",
|
||||||
|
"is-valid-npm-name": "^0.0.4",
|
||||||
|
"make-dir": "^1.2.0",
|
||||||
|
"meow": "^4.0.0",
|
||||||
|
"ora": "^2.0.0",
|
||||||
|
"p-each-series": "^1.0.0",
|
||||||
|
"parse-git-config": "^2.0.0",
|
||||||
|
"which": "^1.3.0"
|
||||||
|
}
|
||||||
|
}
|
12
packages/create-freesewing-pattern/template/.babelrc
Normal file
12
packages/create-freesewing-pattern/template/.babelrc
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"presets": [
|
||||||
|
["env", {
|
||||||
|
"modules": false
|
||||||
|
}],
|
||||||
|
"stage-0",
|
||||||
|
"react"
|
||||||
|
],
|
||||||
|
"plugins": [
|
||||||
|
"external-helpers"
|
||||||
|
]
|
||||||
|
}
|
27
packages/create-freesewing-pattern/template/.eslintrc
Normal file
27
packages/create-freesewing-pattern/template/.eslintrc
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"parser": "babel-eslint",
|
||||||
|
"extends": [
|
||||||
|
"standard",
|
||||||
|
"standard-react"
|
||||||
|
],
|
||||||
|
"env": {
|
||||||
|
"es6": true
|
||||||
|
},
|
||||||
|
"plugins": [
|
||||||
|
"react"
|
||||||
|
],
|
||||||
|
"parserOptions": {
|
||||||
|
"sourceType": "module",
|
||||||
|
"allowImportExportEverywhere": true
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
// don't force es6 functions to include space before paren
|
||||||
|
"space-before-function-paren": 0,
|
||||||
|
|
||||||
|
// allow specifying true explicitly for boolean props
|
||||||
|
"react/jsx-boolean-value": 0,
|
||||||
|
|
||||||
|
// allow imports mixed with non-import statements at top of file
|
||||||
|
"import/first": 0
|
||||||
|
}
|
||||||
|
}
|
20
packages/create-freesewing-pattern/template/.gitignore
vendored
Normal file
20
packages/create-freesewing-pattern/template/.gitignore
vendored
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
# See https://help.github.com/ignore-files/ for more about ignoring files.
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
node_modules
|
||||||
|
|
||||||
|
# builds
|
||||||
|
build
|
||||||
|
dist
|
||||||
|
|
||||||
|
# misc
|
||||||
|
.DS_Store
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
.env.development.local
|
||||||
|
.env.test.local
|
||||||
|
.env.production.local
|
||||||
|
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
31
packages/create-freesewing-pattern/template/README.md
Normal file
31
packages/create-freesewing-pattern/template/README.md
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
# {{name}}
|
||||||
|
|
||||||
|
> {{description}}
|
||||||
|
|
||||||
|
[](https://www.npmjs.com/package/{{name}}) [](https://standardjs.com)
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install --save {{name}}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```jsx
|
||||||
|
import React, { Component } from 'react'
|
||||||
|
|
||||||
|
import MyComponent from '{{name}}'
|
||||||
|
|
||||||
|
class Example extends Component {
|
||||||
|
render () {
|
||||||
|
return (
|
||||||
|
<MyComponent />
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
{{license}} © [{{author}}](https://github.com/{{repo}})
|
2164
packages/create-freesewing-pattern/template/example/README.md
Normal file
2164
packages/create-freesewing-pattern/template/example/README.md
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"name": "{{name}}-example",
|
||||||
|
"homepage": "https://{{author}}.github.io/{{name}}",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"private": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"prop-types": "^15.6.1",
|
||||||
|
"react": "^16.2.0",
|
||||||
|
"react-dom": "^16.2.0",
|
||||||
|
"{{name}}": "{{#if yarn}}link:..{{else}}*{{/if}}",
|
||||||
|
"react-scripts": "^1.1.1"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"start": "react-scripts start",
|
||||||
|
"build": "react-scripts build",
|
||||||
|
"test": "react-scripts test --env=jsdom",
|
||||||
|
"eject": "react-scripts eject"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
|
<meta name="theme-color" content="#000000">
|
||||||
|
|
||||||
|
<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
|
||||||
|
|
||||||
|
<title>{{name}}</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<noscript>
|
||||||
|
You need to enable JavaScript to run this app.
|
||||||
|
</noscript>
|
||||||
|
|
||||||
|
<div id="root"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"short_name": "{{name}}",
|
||||||
|
"name": "{{name}}",
|
||||||
|
"start_url": "./index.html",
|
||||||
|
"display": "standalone",
|
||||||
|
"theme_color": "#000000",
|
||||||
|
"background_color": "#ffffff"
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
import React, { Component } from 'react'
|
||||||
|
|
||||||
|
import ExampleComponent from '{{name}}'
|
||||||
|
|
||||||
|
export default class App extends Component {
|
||||||
|
render () {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<ExampleComponent text='Modern React component module' />
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
import React from 'react'
|
||||||
|
import ReactDOM from 'react-dom'
|
||||||
|
|
||||||
|
import './index.css'
|
||||||
|
import App from './App'
|
||||||
|
|
||||||
|
ReactDOM.render(<App />, document.getElementById('root'))
|
6617
packages/create-freesewing-pattern/template/example/yarn.lock
Normal file
6617
packages/create-freesewing-pattern/template/example/yarn.lock
Normal file
File diff suppressed because it is too large
Load diff
43
packages/create-freesewing-pattern/template/package.json
Normal file
43
packages/create-freesewing-pattern/template/package.json
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
{
|
||||||
|
"name": "{{name}}",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "{{description}}",
|
||||||
|
"author": "{{author}}",
|
||||||
|
"license": "{{license}}",
|
||||||
|
"repository": "{{repo}}",
|
||||||
|
"main": "dist/index.js",
|
||||||
|
"module": "dist/index.es.js",
|
||||||
|
"jsnext:main": "dist/index.es.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "react-scripts test --env=jsdom",
|
||||||
|
"build": "rollup -c",
|
||||||
|
"start": "rollup -c -w",
|
||||||
|
"prepare": "{{manager}} run build",
|
||||||
|
"predeploy": "cd example && {{manager}} install && {{manager}} run build",
|
||||||
|
"deploy": "gh-pages -d example/build"
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"peerDependencies": {
|
||||||
|
"prop-types": "^15.5.4",
|
||||||
|
"react": "^15.0.0 || ^16.0.0",
|
||||||
|
"react-dom": "^15.0.0 || ^16.0.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"babel-core": "^6.26.0",
|
||||||
|
"babel-eslint": "^8.2.1",
|
||||||
|
"babel-plugin-external-helpers": "^6.22.0",
|
||||||
|
"babel-preset-env": "^1.6.0",
|
||||||
|
"babel-preset-react": "^6.24.1",
|
||||||
|
"babel-preset-stage-0": "^6.24.1",
|
||||||
|
"gh-pages": "^1.1.0",
|
||||||
|
"rollup": "^0.54.0",
|
||||||
|
"rollup-plugin-babel": "^3.0.3",
|
||||||
|
"rollup-plugin-commonjs": "^8.2.1",
|
||||||
|
"rollup-plugin-node-resolve": "^3.0.2",
|
||||||
|
"rollup-plugin-peer-deps-external": "^2.0.0",
|
||||||
|
"rollup-plugin-postcss": "^1.1.0"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"dist"
|
||||||
|
]
|
||||||
|
}
|
32
packages/create-freesewing-pattern/template/rollup.config.js
Normal file
32
packages/create-freesewing-pattern/template/rollup.config.js
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
import babel from 'rollup-plugin-babel'
|
||||||
|
import commonjs from 'rollup-plugin-commonjs'
|
||||||
|
import external from 'rollup-plugin-peer-deps-external'
|
||||||
|
import postcss from 'rollup-plugin-postcss'
|
||||||
|
import resolve from 'rollup-plugin-node-resolve'
|
||||||
|
|
||||||
|
import pkg from './package.json'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
input: 'src/index.js',
|
||||||
|
output: [
|
||||||
|
{
|
||||||
|
file: pkg.main,
|
||||||
|
format: 'cjs'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: pkg.module,
|
||||||
|
format: 'es'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
plugins: [
|
||||||
|
external(),
|
||||||
|
postcss({
|
||||||
|
modules: true
|
||||||
|
}),
|
||||||
|
babel({
|
||||||
|
exclude: 'node_modules/**'
|
||||||
|
}),
|
||||||
|
resolve(),
|
||||||
|
commonjs()
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"env": {
|
||||||
|
"mocha": true
|
||||||
|
},
|
||||||
|
"globals": {
|
||||||
|
"expect": true
|
||||||
|
}
|
||||||
|
}
|
26
packages/create-freesewing-pattern/template/src/index.js
Normal file
26
packages/create-freesewing-pattern/template/src/index.js
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* @class ExampleComponent
|
||||||
|
*/
|
||||||
|
|
||||||
|
import React, { Component } from 'react'
|
||||||
|
import PropTypes from 'prop-types'
|
||||||
|
|
||||||
|
import styles from './styles.css'
|
||||||
|
|
||||||
|
export default class ExampleComponent extends Component {
|
||||||
|
static propTypes = {
|
||||||
|
text: PropTypes.string
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const {
|
||||||
|
text
|
||||||
|
} = this.props
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={styles.test}>
|
||||||
|
Example Component: {text}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
/* add css styles here (optional) */
|
||||||
|
|
||||||
|
.test {
|
||||||
|
display: inline-block;
|
||||||
|
margin: 2em auto;
|
||||||
|
border: 2px solid #000;
|
||||||
|
font-size: 2em;
|
||||||
|
}
|
7
packages/create-freesewing-pattern/template/src/test.js
Normal file
7
packages/create-freesewing-pattern/template/src/test.js
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
import ExampleComponent from './'
|
||||||
|
|
||||||
|
describe('ExampleComponent', () => {
|
||||||
|
it('is truthy', () => {
|
||||||
|
expect(ExampleComponent).toBeTruthy()
|
||||||
|
})
|
||||||
|
})
|
1589
packages/create-freesewing-pattern/yarn.lock
Normal file
1589
packages/create-freesewing-pattern/yarn.lock
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue