Optimize node modules, remove old stuff

- Removed webpack build for now, not up-to-date, can be added later if
needed
- Share node modules using symlinks for envs that use the same packages
This commit is contained in:
Juho Teperi 2017-10-13 16:42:25 +03:00
parent b81af9308a
commit c68f5a88f4
17 changed files with 103 additions and 8666 deletions

145
Makefile
View File

@ -1,145 +0,0 @@
PROF =
PORT = 3449
SITEDIR = outsite/public
OUTPUTDIR = $(SITEDIR)/js/out
# convenience shortcuts for continous building
##############################################
# development build with auto-reloading
run: figwheel
# development build with auto-reloading and site generation
runsite:
@$(MAKE) run PROF=+site,$(PROF)
# development build with auto-reloading and webpacked source
runpack: target/webpack/bundle.js
@$(MAKE) run PROF=+webpack,$(PROF)
# development build with figwheel, but no tests
runnotest:
@$(MAKE) run PROF=dev-notest,$(PROF)
# production build with auto-rebuild
runprod: clean
@$(MAKE) serve-site PROF=prod,$(PROF)
# production build with auto-rebuild and webpacked source
runprodpack: clean target/webpack/bundle.js
@$(MAKE) serve-site PROF=prod,webpack,$(PROF)
# production build with auto-rebuild and testing
runprodtest: clean
@$(MAKE) serve-site PROF=prod-test,$(PROF)
clean:
lein clean
## Subtargets
figwheel: trigger-build
@echo "Will start figwheel server at: http://127.0.0.1:$(PORT)\n"
lein with-profile $(PROF), figwheel
serve-site: trigger-build
@echo "Starting site at: http://127.0.0.1:$(PORT)/public\n"
( trap "kill 0" SIGINT SIGTERM EXIT; \
( cd $(SITEDIR)/.. && python -m SimpleHTTPServer $(PORT) & ); \
lein with-profile $(PROF), cljsbuild auto )
trigger-build:
# always trigger build to make sure page-generation works
@echo "(ns empty.generated.ns)" > demo/empty.cljs
@(echo "/* Generated, do not modify */\n\n" && \
cat examples/todomvc/todos.css examples/simple/example.css) \
> site/public/css/examples.css
## gh-pages support
###################
# build site and push upstream to the gh-pages branch
push-gh-pages: build-gh-pages
git push origin gh-pages:gh-pages
# build site and push to reagent-project's doc site
push-project-docs: gen-site gen-docs
# sanity check
test -f $(SITEDIR)/index.html
test ! -e $(OUTPUTDIR)
rm -fr tmp
git clone git@github.com:reagent-project/reagent-project.github.io.git tmp
rm -fr tmp/*
cp -r $(SITEDIR)/* tmp/
mkdir -p tmp/docs/master/
cp -r target/doc/* tmp/docs/master/
cd tmp && \
git add . && git commit -m "Updated" && \
git push
rm -rf tmp
# build site into a gh-pages branch
build-gh-pages: gen-site gh-pages-add
gen-site: clean node_modules
lein with-profile prerender cljsbuild once
node pre-render/main.js
gen-docs: clean
lein codox
# copy contents of $(SITEDIR) to branch gh-pages
gh-pages-add:
# sanity check
test -f $(SITEDIR)/index.html
test ! -e $(OUTPUTDIR)
# make sure gh-pages branch exists
git show-branch gh-pages || true | git mktree | \
xargs git commit-tree | xargs git branch gh-pages
# clone gh-pages branch, and commit site to that
cd $(SITEDIR) && \
rm -rf .git tmp && \
git clone ../.. -lnb gh-pages tmp && \
mv tmp/.git . && \
git add . && git commit -m "Updated" && \
git push && rm -rf .git tmp
## Webpack
##########
target/webpack/bundle.js: node_modules lib/modules.js package.json Makefile
npm run bundle
node_modules:
npm install
## Misc utilities
#################
show-outdated:
lein ancient :all
VERSION := `sed -n -e '/(defproject reagent/ s/.*"\(.*\)"/\1/p' project.clj`
setversion:
version=$(VERSION); \
find . -name project.clj -o -name README.md | \
xargs -n1 sed -i "" -e 's,\(reagent "\)\([^"]*\)",\1'"$$version"'"',g
tag: setversion
if git rev-parse v$(VERSION) 2>/dev/null; then \
echo "Tag already exists"; \
exit 1; \
else \
git commit --allow-empty -a -v -e -m"Version "$(VERSION) && \
git tag v$(VERSION); \
fi

View File

@ -14,7 +14,7 @@ Reagent provides a way to write efficient React components using (almost) nothin
### Prerequisites
* [JDK](http://www.azul.com/downloads/zulu/)
* Java JDK
* [Leiningen](http://leiningen.org/)
### Usage
@ -36,7 +36,7 @@ To use Reagent in an existing project you add this to your dependencies in `proj
This is all you need to do if you want the standard version of React. If you want the version of React with addons, you'd use something like this instead:
[reagent "0.6.0" :exclusions [cljsjs/react]]
[reagent "0.7.0" :exclusions [cljsjs/react]]
[cljsjs/react-with-addons "15.4.2-2"]
If you want to use your own build of React (or React from a CDN), you have to use `:exclusions` variant of the dependency, and also provide a file named "cljsjs/react.cljs", containing just `(ns cljsjs.react)`, in your project.

31
docs/development.md Normal file
View File

@ -0,0 +1,31 @@
# Reagent development
## Running tests
To prepare different environments for tests run:
```bash
./prepare-test.sh
```
After this, you can run the full test set:
```bash
./run-tests.sh
```
Running all the tests can take a while, so while developing Reagent,
you might want to focus on one test environment, and use Figwheel to
run tests on your browser:
```
cd test-environments/browser-umd-react-16
# If build requires e.g. Lein profiles or such,
# the folder contains figwheel.sh script:
./figwheel.sh
# Else, just run figwheel normally:
lein figwheel
# Open http://0.0.0.0:3449 on a browser
# Check console for test output
```

1776
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +1,7 @@
{
"dependencies": {
"@cljs-oss/module-deps": "1.1.1",
"create-react-class": "^15.6.2",
"react": "^15.6.2",
"react-dom": "^15.6.2"
},
"scripts": {
"bundle": "webpack && NODE_ENV=production webpack -p"
},
"devDependencies": {
"babel-core": "^5.8.25",
"karma": "^1.7.1",
"karma-chrome-launcher": "^2.2.0",
"karma-cljs-test": "^0.1.0",
"webpack": "^1.12.2"
"karma-cljs-test": "^0.1.0"
}
}

View File

@ -1,8 +1,23 @@
#!/bin/bash
npm install
echo
# Symlinked node_modules, package.json and package-lock.json
# are used to share node_modules between environments that
# use the same packages.
for env in test-environments/*; do
name=$(basename "$env")
(
cd "$env"
npm install
if [[ ! -L node_modules ]]; then
echo "Install $name packages"
npm install
else
echo "$name uses $(readlink node_modules)"
fi
)
echo
done

View File

@ -24,32 +24,16 @@
:source-paths ["src"]}
:profiles {:node-test [:test {:cljsbuild
{:builds {:client {:compiler {:target :nodejs}}}}}]
{:builds {:client {:compiler {:target :nodejs
:process-shim false}}}}}]
:test {:cljsbuild
{:builds {:client {:source-paths ["test"]
:compiler {:main "reagenttest.runtests"}}}}}
{:builds {:client {:compiler {:main "reagenttest.runtests"}}}}}
:react-16 {:dependencies [[cljsjs/react "16.0.0-0"]
[cljsjs/react-dom "16.0.0-0"]
[cljsjs/react-dom-server "16.0.0-0"]]}
:fig [{:dependencies [[figwheel "0.5.14"]
[doo "0.1.8"]]
:plugins [[lein-figwheel "0.5.14"]]
:source-paths ["demo" "test"] ;; for lighttable
:resource-paths ["site" "outsite"]
:figwheel {:css-dirs ["site/public/css"]}
:cljsbuild
{:builds
{:client
{:figwheel true
:compiler {:source-map true
:optimizations :none
;; :recompile-dependents false
:output-dir "outsite/public/js/out"
:asset-path "js/out"}}}}}]
:site {:resource-paths ^:replace ["outsite"]
:figwheel {:css-dirs ^:replace ["outsite/public/css"]}}
@ -71,20 +55,23 @@
:output-to "pre-render/main.js"
:output-dir "pre-render/out"}}}}}]
:webpack {:cljsbuild
{:builds {:client
{:compiler
{:foreign-libs
[{:file "target/webpack/bundle.js"
:file-min "target/webpack/bundle.min.js"
:provides ["cljsjs.react.dom"
"cljsjs.react.dom.server"
"cljsjs.react"]
:requires []}]}}}}}
:prod-test [:prod :test]
:dev [:fig]}
:dev {:dependencies [[figwheel "0.5.14"]
[doo "0.1.8"]]
:plugins [[lein-figwheel "0.5.14"]]
:source-paths ["demo"] ;; for lighttable
:resource-paths ["site" "outsite"]
:figwheel {:css-dirs ["site/public/css"]}
:cljsbuild
{:builds
{:client
{:figwheel true
:compiler {:source-map true
:optimizations :none
;; :recompile-dependents false
:output-dir "outsite/public/js/out"
:asset-path "js/out"}}}}}}
:clean-targets ^{:protect false} [:target-path :compile-path
"outsite/public/js"
@ -98,6 +85,7 @@
:cljsbuild {:builds {:client
{:source-paths ["src"
"demo"
"test"
"examples/todomvc/src"
"examples/simple/src"
"examples/geometry/src"]

View File

@ -13,7 +13,6 @@ EXIT=0
SUMMARY="$blue##\n## SUMMARY\n##$reset\n\n"
for env in test-environments/*; do
FAIL=0
name=$(basename "$env")
(
cd "$env"
@ -23,8 +22,7 @@ for env in test-environments/*; do
echo
./test.sh
)
[[ $? != "0" ]] && FAIL=1
if [[ $FAIL != "0" ]]; then
if [[ $? != "0" ]]; then
echo
echo -e "${red}FAIL $name$reset"
SUMMARY="$SUMMARY${red}FAIL $name$reset\n"

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../browser-umd/package-lock.json

View File

@ -0,0 +1,3 @@
#!/bin/bash
set -x
lein with-profile dev,react-16 figwheel

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../browser-umd/package-lock.json

View File

@ -0,0 +1 @@
../../site

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../../package-lock.json

View File

@ -1,7 +0,0 @@
{
"devDependencies": {
"karma": "^1.7.1",
"karma-chrome-launcher": "^2.2.0",
"karma-cljs-test": "^0.1.0"
}
}

View File

@ -0,0 +1 @@
../../package.json

File diff suppressed because it is too large Load Diff

1
test-environments/node/package-lock.json generated Symbolic link
View File

@ -0,0 +1 @@
../browser-node/package-lock.json

View File

@ -1,13 +0,0 @@
{
"dependencies": {
"@cljs-oss/module-deps": "1.1.1",
"create-react-class": "^15.6.2",
"react": "^15.6.2",
"react-dom": "^15.6.2"
},
"devDependencies": {
"karma": "^1.7.1",
"karma-chrome-launcher": "^2.2.0",
"karma-cljs-test": "^0.1.0"
}
}

View File

@ -0,0 +1 @@
../browser-node/package.json

View File

@ -1,23 +0,0 @@
var path = require('path');
var webpack = require('webpack');
var prod = process.env.NODE_ENV === "production";
module.exports = {
entry: './lib/modules.js',
output: {
path: "./target/webpack/",
filename: prod ? 'bundle.min.js' : 'bundle.js'
},
module: {
loaders: [
{ test: /.jsx?$/, loader: 'babel-loader', include: "./lib" }
]
},
plugins: [
new webpack.DefinePlugin(
{'process.env': { 'NODE_ENV': prod ? '"production"' : '"development"'}})
]
}