chore: some updates and improvements

This commit is contained in:
Pedro Nauck
2018-05-28 13:57:24 -03:00
parent cf3ec4e774
commit fc45f8c7d4
12 changed files with 78 additions and 64 deletions

View File

@@ -12,8 +12,7 @@
"prop-types": "^15.6.1",
"react": "^16.4.0",
"react-dom": "^16.4.0",
"react-emotion": "^9.1.3",
"react-router-dom": "^4.2.2"
"react-emotion": "^9.1.3"
},
"devDependencies": {
"babel-plugin-emotion": "^9.0.1"

View File

@@ -11,7 +11,7 @@
"lerna": "^2.11.0",
"libundler": "^1.6.4",
"npm-run-all": "^4.1.3",
"prettier": "^1.11.1",
"prettier": "^1.13.0",
"trash-cli": "^1.4.0",
"tslint": "^5.10.0",
"tslint-config-prettier": "^1.13.0",

View File

@@ -19,7 +19,7 @@
"tslint": "tslint --project ."
},
"dependencies": {
"@babel/core": "^7.0.0-beta.49",
"@babel/core": "7.0.0-beta.49",
"@babel/runtime": "^7.0.0-beta.49",
"@mdx-js/loader": "^0.9.0",
"@mdx-js/mdx": "^0.9.0",
@@ -33,7 +33,7 @@
"chalk": "^2.4.1",
"chokidar": "^2.0.3",
"connect-history-api-fallback": "^1.5.0",
"deepmerge": "^2.1.0",
"deepmerge": "^2.1.1",
"detect-port": "^1.2.3",
"express": "^4.16.3",
"fast-glob": "^2.2.2",
@@ -48,7 +48,7 @@
"koa-static": "^4.0.3",
"load-cfg": "^0.0.1",
"lodash.get": "^4.4.2",
"prettier": "^1.12.0",
"prettier": "^1.13.0",
"react-dev-utils": "^5.0.1",
"react-hot-loader": "4.2.0",
"remark-frontmatter": "^1.2.0",
@@ -65,7 +65,7 @@
"unist-util-remove": "^1.0.0",
"unist-util-visit": "^1.3.1",
"url-loader": "^1.0.1",
"webpack": "^4.8.3",
"webpack": "^4.9.1",
"webpack-chain": "^4.8.0",
"webpack-manifest-plugin": "^2.0.3",
"webpack-serve": "^1.0.2",
@@ -83,7 +83,7 @@
"@types/fs-extra": "^5.0.2",
"@types/html-webpack-plugin": "^2.30.3",
"@types/lodash.get": "^4.4.3",
"@types/node": "10.1.2",
"@types/node": "10.1.3",
"@types/prettier": "^1.12.4",
"@types/resolve": "^0.0.8",
"@types/webpack": "^4.4.0",

View File

@@ -1,6 +1,8 @@
import { Plugin } from './Plugin'
import { Config as Args } from './commands/args'
import { isFn } from './utils/helpers'
export interface Server {
close: () => void
on: (event: string, cb: (server: any) => void) => void
@@ -48,11 +50,13 @@ export class Bundler<C = any> {
}
private reduceWithPlugins(dev: boolean): any {
return (config: C, plugin: Plugin) =>
plugin.modifyBundlerConfig(config, dev) || config
return (config: C, { modifyBundlerConfig }: Plugin) =>
modifyBundlerConfig && isFn(modifyBundlerConfig)
? modifyBundlerConfig(config, dev)
: config
}
private mountConfig(config: C): C {
private mountConfig(config: C): any {
const { plugins, env } = this.args
const dev = env === 'development'

View File

@@ -9,7 +9,7 @@ export interface BabelRC {
babelrc?: boolean
}
export type ModifyBundlerConfig = <C>(config: C, dev: boolean) => C
export type ModifyBundlerConfig<C = any> = (config: C, dev: boolean) => C
export type ModifyBabelRC = (babelrc: BabelRC) => BabelRC
export type OnServerListening = <S>(server: S) => void
export type OnPreBuild = () => void
@@ -19,17 +19,17 @@ export type OnPostRender = () => void
export type Wrapper = <R>(props: any) => R
export interface PluginFactory {
modifyBundlerConfig: ModifyBundlerConfig
modifyBabelRc: ModifyBabelRC
onServerListening: OnServerListening
onPreBuild: OnPreBuild
onPostBuild: OnPostBuild
onPreRender: OnPreRender
onPostRender: OnPostRender
wrapper: Wrapper
modifyBundlerConfig?: ModifyBundlerConfig
modifyBabelRc?: ModifyBabelRC
onServerListening?: OnServerListening
onPreBuild?: OnPreBuild
onPostBuild?: OnPostBuild
onPreRender?: OnPreRender
onPostRender?: OnPostRender
wrapper?: Wrapper
}
export class Plugin {
export class Plugin<C = any> implements PluginFactory {
public static runPluginsMethod(
plugins: Plugin[]
): (method: keyof Plugin, ...args: any[]) => void {
@@ -52,20 +52,17 @@ export class Plugin {
plugins.map(p => get(p, prop)).filter(m => m)
}
public readonly modifyBundlerConfig: ModifyBundlerConfig
public readonly modifyBabelRc: ModifyBabelRC
public readonly onServerListening: OnServerListening
public readonly onPreBuild: OnPreBuild | null
public readonly onPostBuild: OnPostBuild | null
public readonly onPreRender: OnPreRender | null
public readonly onPostRender: OnPostRender | null
public readonly wrapper: Wrapper
public readonly modifyBundlerConfig?: ModifyBundlerConfig<C>
public readonly modifyBabelRc?: ModifyBabelRC
public readonly onServerListening?: OnServerListening
public readonly onPreBuild?: OnPreBuild
public readonly onPostBuild?: OnPostBuild
public readonly onPreRender?: OnPreRender
public readonly onPostRender?: OnPostRender
public readonly wrapper?: Wrapper
constructor(p: PluginFactory) {
this.modifyBundlerConfig = (config: any, dev: boolean) => {
return isFn(p.modifyBundlerConfig) && p.modifyBundlerConfig(config, dev)
}
this.modifyBundlerConfig = p.modifyBundlerConfig
this.modifyBabelRc = p.modifyBabelRc
this.onServerListening = p.onServerListening
this.onPreBuild = p.onPreBuild
@@ -76,6 +73,6 @@ export class Plugin {
}
}
export function createPlugin(factory: PluginFactory): Plugin {
export function createPlugin<C = any>(factory: PluginFactory): Plugin<C> {
return new Plugin(factory)
}

View File

@@ -7,6 +7,7 @@ import htmlWebpackPlugin from 'html-webpack-plugin'
import manifestPlugin from 'webpack-manifest-plugin'
import UglifyJs from 'uglifyjs-webpack-plugin'
import matter from 'remark-frontmatter'
import merge from 'deepmerge'
import { Config as ConfigObj } from '../../commands/args'
import { plugin as mdastPlugin } from '../../utils/plugin-mdast'
@@ -18,24 +19,20 @@ const INLINE_LIMIT = 10000
interface HappypackLoaderParams {
id: string
plugins?: any[]
opts?: BabelRC
}
const happypackLoader = (babelrc: any) => ({
id,
plugins,
opts = {},
}: HappypackLoaderParams) => [
{
id,
threads: 2,
verbose: false,
loaders: [
{
loader: require.resolve('babel-loader'),
query: {
...babelrc,
plugins,
},
query: merge(babelrc, opts),
},
],
},
@@ -46,15 +43,16 @@ const setupHappypack = (config: Config, babelrc: any) => {
const jsx = loader({
id: 'jsx',
plugins: babelrc.plugins.concat([
require.resolve('react-hot-loader/babel'),
require.resolve('babel-plugin-react-docgen'),
]),
opts: {
plugins: [
require.resolve('react-hot-loader/babel'),
require.resolve('babel-plugin-react-docgen'),
],
},
})
const mdx = loader({
id: 'mdx',
plugins: babelrc.plugins,
})
config.plugin('happypack-jsx').use(HappyPack, jsx)
@@ -179,7 +177,17 @@ export const createConfig = (babelrc: BabelRC) => (
)
config.resolve.extensions
.merge(['.web.js', '.mjs', '.js', '.json', '.web.jsx', '.jsx', '.mdx'])
.merge([
'.web.js',
'.mjs',
'.js',
'.json',
'.web.jsx',
'.jsx',
'.mdx',
'.ts',
'.tsx',
])
.end()
.modules.add('node_modules')
.add(srcPath)

View File

@@ -1,4 +1,4 @@
import * as commands from './commands'
export { commands }
export { createPlugin } from './Plugin'
export { Plugin, createPlugin } from './Plugin'

View File

@@ -14,7 +14,7 @@ export const babelrc = (args: Config) => {
return [...(args.plugins || [])].reduce(
(obj, plugin) =>
isFn(plugin.modifyBabelRc)
plugin.modifyBabelRc && isFn(plugin.modifyBabelRc)
? merge(obj, plugin.modifyBabelRc(config))
: obj,
config

View File

@@ -5,6 +5,7 @@ export const format = (code: string): Promise<string> =>
new Promise((resolve, reject) => {
try {
const result = prettier.format(code, {
parser: 'babylon',
semi: false,
singleQuote: true,
trailingComma: 'all',
@@ -12,7 +13,7 @@ export const format = (code: string): Promise<string> =>
resolve(result)
} catch (err) {
logger.fatar(err)
logger.fatal(err)
resolve(err)
}
})

View File

@@ -23,7 +23,7 @@
},
"dependencies": {
"@sindresorhus/slugify": "^0.3.0",
"deepmerge": "^2.1.0",
"deepmerge": "^2.1.1",
"invariant": "^2.2.4",
"loadable-components": "^2.2.2",
"pascalcase": "^0.1.1",

View File

@@ -20,11 +20,11 @@
"fix:tslint": "tslint --fix --project ."
},
"dependencies": {
"deepmerge": "^2.1.0",
"deepmerge": "^2.1.1",
"find-up": "^2.1.0"
},
"devDependencies": {
"@types/find-up": "^2.1.1",
"@types/node": "^10.1.2"
"@types/node": "^10.1.3"
}
}

View File

@@ -34,7 +34,7 @@
semver "^5.4.1"
source-map "^0.5.0"
"@babel/core@7.0.0-beta.49", "@babel/core@^7.0.0-beta.49":
"@babel/core@7.0.0-beta.49":
version "7.0.0-beta.49"
resolved "https://registry.npmjs.org/@babel/core/-/core-7.0.0-beta.49.tgz#73de2081dd652489489f0cb4aa97829a1133314e"
dependencies:
@@ -1457,9 +1457,9 @@
version "10.0.0"
resolved "https://registry.npmjs.org/@types/node/-/node-10.0.0.tgz#c40f8e07dce607d3ef25a626b93a6a7cdcf97881"
"@types/node@10.1.2", "@types/node@^10.1.2":
version "10.1.2"
resolved "https://registry.npmjs.org/@types/node/-/node-10.1.2.tgz#1b928a0baa408fc8ae3ac012cc81375addc147c6"
"@types/node@10.1.3", "@types/node@^10.1.3":
version "10.1.3"
resolved "https://registry.npmjs.org/@types/node/-/node-10.1.3.tgz#5c16980936c4e3c83ce64e8ed71fb37bd7aea135"
"@types/prettier@^1.12.4":
version "1.12.4"
@@ -3272,6 +3272,10 @@ deepmerge@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-2.1.0.tgz#511a54fff405fc346f0240bb270a3e9533a31102"
deepmerge@^2.1.1:
version "2.1.1"
resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-2.1.1.tgz#e862b4e45ea0555072bf51e7fd0d9845170ae768"
defaults@^1.0.2, defaults@^1.0.3:
version "1.0.3"
resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
@@ -5220,7 +5224,7 @@ jsesc@~0.5.0:
version "0.5.0"
resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
json-parse-better-errors@^1.0.1:
json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
@@ -6766,9 +6770,9 @@ preserve@^0.2.0:
version "0.2.0"
resolved "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
prettier@^1.11.1, prettier@^1.12.0:
version "1.12.1"
resolved "https://registry.npmjs.org/prettier/-/prettier-1.12.1.tgz#c1ad20e803e7749faf905a409d2367e06bbe7325"
prettier@^1.13.0:
version "1.13.0"
resolved "https://registry.npmjs.org/prettier/-/prettier-1.13.0.tgz#054de8d5fb1a4405c845d16183f58a2c301f6f16"
pretty-error@^2.0.2, pretty-error@^2.1.1:
version "2.1.1"
@@ -9107,9 +9111,9 @@ webpack-sources@^1.0.1, webpack-sources@^1.1.0:
source-list-map "^2.0.0"
source-map "~0.6.1"
webpack@^4.8.3:
version "4.8.3"
resolved "https://registry.npmjs.org/webpack/-/webpack-4.8.3.tgz#957c8e80000f9e5cc03d775e78b472d8954f4eeb"
webpack@^4.9.1:
version "4.9.1"
resolved "https://registry.npmjs.org/webpack/-/webpack-4.9.1.tgz#fa7bd738b17fd7f09f37da461b2f5c16c6565f34"
dependencies:
"@webassemblyjs/ast" "1.4.3"
"@webassemblyjs/wasm-edit" "1.4.3"
@@ -9121,6 +9125,7 @@ webpack@^4.8.3:
chrome-trace-event "^0.1.1"
enhanced-resolve "^4.0.0"
eslint-scope "^3.7.1"
json-parse-better-errors "^1.0.2"
loader-runner "^2.3.0"
loader-utils "^1.1.0"
memory-fs "~0.4.1"