Skip to content

Commit c96ec91

Browse files
committed
Adjust eject script
1 parent b7ed2fd commit c96ec91

File tree

7 files changed

+62
-69
lines changed

7 files changed

+62
-69
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
'use strict'
1+
module.exports = language => `'use strict'
22
33
// Silence webpack2 deprecation warnings
44
// https://github.com/vuejs/vue-loader/issues/666
@@ -15,18 +15,15 @@ const addPlugins = webpack2Block.addPlugins
1515
1616
const babel = require('@webpack-blocks/babel6');
1717
const devServer = require('@webpack-blocks/dev-server2');
18-
const typescript = require('@webpack-blocks/typescript');
19-
const webpack = require('webpack');
18+
${language === 'javascript' ? '' : `const typescript = require('@webpack-blocks/typescript');
19+
`}const webpack = require('webpack');
2020
const HtmlWebpackPlugin = require('html-webpack-plugin');
2121
const CopyWebpackPlugin = require('copy-webpack-plugin');
22+
const CleanWebpackPlugin = require('clean-webpack-plugin');
2223
2324
const path = require('path');
2425
2526
const babelConfig = {
26-
// This is a feature of `babel-loader` for webpack (not Babel itself).
27-
// It enables caching results in ./node_modules/.cache/babel-loader/
28-
// directory for faster rebuilds.
29-
cacheDirectory: true,
3027
// Instead of relying on a babelrc file to configure babel (or in package.json configs)
3128
// We speficy here which presets to use. In the future this could be moved to it's own
3229
// package as create-react-app does with their 'babel-preset-react-app module.
@@ -49,48 +46,44 @@ const babelConfig = {
4946
]
5047
}
5148
52-
module.exports = function(language) {
53-
const ending = language === 'javascript' ? '.js' : '.ts'
54-
const baseConfig = [
55-
entryPoint(path.join(process.cwd(), 'src', 'index' + ending)),
56-
setOutput(path.join(process.cwd(), 'build', 'bundle.[hash].js')),
57-
babel(babelConfig),
58-
defineConstants({
59-
'process.env.NODE_ENV': process.env.NODE_ENV
49+
const config = [
50+
entryPoint(path.join(process.cwd(), 'src', 'index.${language === 'javascript' ? 'js' : 'ts' }')),
51+
setOutput(path.join(process.cwd(), 'build', 'bundle.[hash].js')),
52+
babel(Object.assign({}, babelConfig, { cacheDirectory: true })),
53+
defineConstants({
54+
'process.env.NODE_ENV': process.env.NODE_ENV
55+
}),
56+
addPlugins([
57+
new HtmlWebpackPlugin({
58+
template: 'public/index.html',
59+
inject: true,
60+
favicon: 'public/favicon.png',
61+
hash: true
6062
}),
63+
new webpack.ProvidePlugin({
64+
Snabbdom: 'snabbdom-pragma'
65+
})
66+
]),
67+
env('development', [
68+
devServer({}, require.resolve('react-dev-utils/webpackHotDevClient')),
69+
sourceMaps() //The default is cheap-module-source-map
70+
]),
71+
env('production', [
6172
addPlugins([
62-
new HtmlWebpackPlugin({
63-
template: 'public/index.html',
64-
inject: true,
65-
favicon: 'public/favicon.png',
66-
hash: true
67-
}),
68-
new webpack.ProvidePlugin({
69-
Snabbdom: 'snabbdom-pragma'
70-
})
71-
]),
72-
env('development', [
73-
devServer({}, require.resolve('react-dev-utils/webpackHotDevClient')),
74-
sourceMaps() //The default is cheap-module-source-map
75-
]),
76-
env('production', [
77-
addPlugins([
78-
new webpack.optimize.UglifyJsPlugin(),
79-
new CopyWebpackPlugin([{ from: 'public', to: '' }])
80-
])
81-
])
82-
]
83-
84-
const config = language === 'javascript' ? baseConfig : baseConfig
85-
.concat([
86-
typescript({
87-
tsconfig: path.join(__dirname, 'tsconfig.json'),
88-
useBabel: true,
89-
babelOptions: babelConfig,
90-
useCache: true,
91-
cacheDirectory: 'node_modules/.cache/at-loader'
73+
new webpack.optimize.UglifyJsPlugin(),
74+
new CopyWebpackPlugin([{ from: 'public', to: '' }]),
75+
new CleanWebpackPlugin([ path.join(process.cwd(), 'build') ], {
76+
root: process.cwd()
9277
})
9378
])
79+
])${language === 'javascript' ? '' : `,
80+
typescript({
81+
configFileName: path.join(__dirname, '..', 'configs', 'tsconfig.json'),
82+
useBabel: true,
83+
babelOptions: babelConfig,
84+
useCache: true,
85+
cacheDirectory: 'node_modules/.cache/at-loader'
86+
})` }
87+
]
9488
95-
return createConfig(config)
96-
}
89+
module.exports = createConfig(config)`

packages/cycle-scripts/index.js

100755100644
File mode changed.

packages/cycle-scripts/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
"babel-plugin-transform-react-jsx": "^6.24.1",
3939
"babel-preset-env": "^1.3.3",
4040
"chalk": "^1.1.3",
41+
"clean-webpack-plugin": "^0.1.16",
4142
"copy-webpack-plugin": "^4.0.1",
4243
"cross-spawn": "^5.1.0",
4344
"fs-extra": "^2.1.2",

packages/cycle-scripts/scripts/build.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ const FileSizeReporter = require('react-dev-utils/FileSizeReporter')
4747
const measureFileSizesBeforeBuild = FileSizeReporter.measureFileSizesBeforeBuild
4848
const printFileSizesAfterBuild = FileSizeReporter.printFileSizesAfterBuild
4949

50-
const config = require('../configs/webpack.config')(notEjected.language)
50+
const config = eval(require('../configs/webpack.config')(notEjected.language))
5151

5252
measureFileSizesBeforeBuild(buildPath).then(previousFileSizes => {
5353
// Start the webpack build

packages/cycle-scripts/scripts/eject.js

+18-20
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,28 @@ inquirer.prompt([ejectConfirmation]).then(answers => {
2929
// STEP 1 - Prepare package.json
3030
// Declaring new scripts
3131
const scripts = {
32-
start: 'node scripts/start.js',
33-
test: 'node scripts/test.js',
34-
build: 'node scripts/build.js'
32+
start: 'NODE_ENV=development webpack-dev-server --config webpack.config.js',
33+
build: 'NODE_ENV=production webpack --config webpack.config.js'
3534
}
35+
36+
const language = appPackageJson.cca.language
37+
3638
// Remove flavor from devpendencies
3739
delete appPackageJson.devDependencies[flavorPackageJson.name]
3840
// Remove cca settings
3941
delete appPackageJson.cca
4042
// Flavor's dependencies -> application devDependency.
4143
// We merge flavor's dependencies with application's devDepependencies
42-
const devDependencies = Object.assign(
44+
let devDependencies = Object.assign(
4345
{},
4446
appPackageJson.devDependencies,
4547
flavorPackageJson.dependencies
4648
)
49+
const preEjectDependencies = ['inquirer', 'cross-spawn', 'fs-extra', 'chalk']
50+
preEjectDependencies.forEach(dep => {
51+
delete devDependencies[dep]
52+
})
53+
4754
// New package.json content
4855
const packageJsonContent = Object.assign(
4956
{},
@@ -59,23 +66,14 @@ inquirer.prompt([ejectConfirmation]).then(answers => {
5966
JSON.stringify(packageJsonContent, null, 2)
6067
)
6168

62-
// STEP 2 - Copy scripts
63-
function copyScript (script) {
64-
fs.copySync(path.join(__dirname, script), path.join(appScriptsPath, script))
65-
}
66-
// Make sure appScriptsPath exists
67-
fs.ensureDirSync(appScriptsPath)
68-
// Copy over start, test and build scripts
69-
copyScript('start.js')
70-
copyScript('test.js')
71-
copyScript('build.js')
72-
73-
// STEP 3 - Copy utils
74-
fs.copySync(path.join(__dirname, 'utils'), path.join(appScriptsPath, 'utils'))
69+
// STEP 2 - Copy configs
70+
const configPath = path.join(__dirname, '..', 'configs')
71+
const wpconfig = require('../configs/webpack.config')(language)
72+
fs.writeFileSync(path.join(appPath, 'webpack.config.js'), wpconfig)
7573

76-
// STEP 4 - Copy configs
77-
fs.copySync(path.join(__dirname, '../', 'configs', language), path.join(appPath, 'configs'))
78-
fs.copySync(path.join(__dirname, '../', 'configs', 'webpackDevServer.config.js'), path.join(appPath, 'configs', 'webpackDevServer.config.js'))
74+
if(language === 'typescript') {
75+
fs.copySync(path.join(configPath, 'tsconfig.json'), appPath)
76+
}
7977

8078
// TODO sucess message
8179
})

packages/cycle-scripts/scripts/start.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ const createWebpackCompiler = require('./utils/createWebpackCompiler')
4242
const openBrowser = require('react-dev-utils/openBrowser')
4343
const notEjected = require(path.join(process.cwd(), 'package.json')).cca
4444

45-
const config = require('../configs/webpack.config')(notEjected.language)
45+
const config = eval(require('../configs/webpack.config')(notEjected.language))
4646

4747
const cli = 'npm'
4848
const protocol = 'http'

packages/cycle-scripts/template/src/typescript/interfaces.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
module.exports = replacements => `${replacements.import}
2+
${replacements.typeImport}
23
import {DOMSource, VNode} from '@cycle/dom'
34
45
export type Sources = {

0 commit comments

Comments
 (0)