TLDR; What's else is required for Sergey to push this code [1]?
Michal, My only dilemma is that my name is "Carlos Santana" and I don't play the guitar :-p, other than that I I'm OK. It looks you have a clear distinction between application hooks, and plugin hooks. Maybe this is something you can document because I'm not aware of any documentation that states this design concept. As of today released version of Cordova, I just know about plain hooks that by the way are not documented in our docs, just a readme file that we dump in a folder called "hooks" Maybe in your mind you have clear definition that the hooks folder should include only things provided by end user, anything else should not. I don't disagree, just that it needs to be communicated via doc some where. Myles, I don't want user to run npm anything, just cordova commands and my hooks code to run automatically on every prepare if a flag is passed. About the location of node_modules, I understand how node/npm it works but I appreciate the clarification. I don't have an issue with that. What I have a problem is about another hook depending on a node module and they install the node modules in the cordova project, hook directory or a hook_type directory, or even worst I install the node module that is not compatible with their code and I brake them. I was thinking installing them in a place with less conflicts like hooks/after_prepare/worklight/node_modules but then if I have another hook then is duplicate code again, or install in plugins/mypluginid/node_modules/ Thanks all for the feedback. Now to my next option. I took a look at plugin hooks code [1], I thought they were only for hook code to run at install and unininstall time of plugin, but it's not, its better it's looks like its' what I was looking for. 1. Can be package with plugin ( no need to ask unser to unzip wl_hooks.zip) 2. They can run at any lifecycle event (before_prepare, before_build) 3. One script can be use for different lifecycles 4. I can reuse node modules already available under cordova-lib, which I don't need that many only nopt, shelljs, elementree for now OK I will try to implement my hooks using this pull request, if I'm successful, What's else is required for Sergey push this code? [1]: https://github.com/apache/cordova-lib/pull/55 -- Carlos On Tue, Aug 5, 2014 at 5:54 PM, Lorin Beer <lorin.b...@gmail.com> wrote: > thanks Myles, nice to see you on the list! > > > On Tue, Aug 5, 2014 at 2:33 PM, Myles Borins <my...@famo.us> wrote: > > > If you have a package.json at the base of the project any dependencies > > installed in the node_modules folder will be resolved at any depth. You > > should only need to do a single install at the base of hook. Do you > have a > > copy of the project I could take a peek at? > > > > If the cordovaUserProject itself already has a package.json you should > > just add the dependencies in there and they will automatically be added > to > > the path when required in by the scripts (and only need to be installed > at > > the same time the user does the initial bootstrap). If you were > interested > > in abstracting these scripts further it is possible to build node modules > > that expose binaries through the ‘bin’ key in the package json. You > would > > then be able to reference these scripts directly in an npm script without > > specific paths, as they will be installed into ./node_modules/.bin, which > > is shimmed into path of an npm script. > > > > This would allow you to add the following to the single package.json > > > > scripts: { > > bootstrap: ‘prepare’, > > compile: ‘some bash script that compiles’, > > post: ‘compile’, > > build: ‘npm run bootstrap && npm run compile && npm run post’ > > } > > > > then in your project (or any script) you could simply run ‘npm build’ and > > it would all work! > > > > Please let me know if any of that wasn’t clear. It is worth mentioning > > that install scripts are generally considered an anti-pattern in the node > > community (as it states in the docs > > https://www.npmjs.org/doc/misc/npm-scripts.html). Clever concatenation > > of bash scripts is considered elegant though! > > > > Best, > > > > Myles Borins > > > > On Aug 5, 2014, at 2:22 PM, Lorin Beer <lorin.b...@gmail.com> wrote: > > > > > a suggestion: > > > > > > as part of the hook script, have it attempt an npm install iff the > > > dependencies are not present. You can hide the require calls in a > > > try/catch, if caught, then run an install script in the relevant hook > > > directories. > > > > > > If admin privileges are required for the install, prompt for > credentials, > > > or tell the user to change the directory permissions... > > > > > > Don't know about 'best practice', but it's light weight and doesn't > force > > > the user to execute an intermediate install step. > > > > > > > > > > > > On Tue, Aug 5, 2014 at 1:00 PM, Carlos Santana <csantan...@gmail.com> > > wrote: > > > > > >> I'm writing new cordova hooks, and decided to do them in nodejs > > >> > > >> First problem I hit was dependencies for the hook scripts: > > >> so far I have two scripts: > > >> cordovaUserProject/hook/before_prepare/wl_b_prepare.js > > >> cordovaUserProject/hook/after_compile/wl_a_compile.js > > >> > > >> I have both starting like this: > > >> #!/usr/bin/env node > > >> > > >> var shell = require('shelljs'), > > >> nopt = require('nopt'); > > >> > > >> shell.echo('Running Worklight Cordova Hook'); > > >> > > >> > > >> I get errors because it can't find dependencies 'shelljs' and 'nopt' > > >> > > >> To resolve this I would need the user or another hook before this one > to > > >> install the node_modules in one of these places > > >> > > >> cordovaUserProject/node_modules/ > > >> cordovaUserProject/hook/node_modules/ > > >> cordovaUserProject/hook/before_prepare/node_modules/ > > >> cordovaUserProject/hook/after_compile/node_modules/ > > >> > > >> What would be a best practice? > > >> Who get's to install? (user or me) > > >> Where to install? > > >> > > >> > > >> > > >> -- > > >> Carlos Santana > > >> <csantan...@gmail.com> > > >> > > > > > -- Carlos Santana <csantan...@gmail.com>