On Wed, Nov 25, 2015 at 12:51 PM, Justin D'Arcangelo < [email protected]> wrote:
> There are cases where we need to include certain files **at build time** > conditionally. > That's a perfect match for the "build-step is a static site generator" part. At the file level, the build system can alter paths and resources, just like a web server could serve different content for different devices. I think most of our existing needs would fit nicely with this approach. There's an argument to be made for within-file substitutions in some cases, such as optimizing HTML includes in "index.html". But I don't think we should extend that need to including a full-blown conditional preprocessor running through all HTML and JS files. (forgot reply-all, sorry justin) On Wed, Nov 25, 2015 at 12:51 PM, Justin D'Arcangelo < [email protected]> wrote: > There are cases where we need to include certain files **at build time** > conditionally. Of course we should feature-detect at runtime when we can, > but there are many instances when we need to branch code paths > conditionally when building. Especially when we try to optimize our > application bundles and exclude resources that may not be needed for > certain devices, we similarly may need to include certain stylesheets, > scripts, etc. based on the device profile as well. > > -Justin > > > On Nov 25, 2015, at 3:36 PM, Marcus Cavanaugh <[email protected]> wrote: > > Using a conditional preprocessor is an admission that the Web's support > for conditionals is not enough. The Web already supports IFDEF: > > if (window.feature) { } > > When feature detection isn't enough, hypermedia already has an answer. No > need for a module system. Our build system is a glorified static site > generator, positioned exceptionally well to write files based on build > flags: > > <script src="thing-for-specific-device.js"></script> > <script> > Thing.doSomething(); // no feature detection conditionals! > </script> > > Conditional preprocessors turn against many of the web's foundational > values (view-source transparency, hypermedia, open-source). The Web's > solution is already simple, sufficient, and widely-understood. > > From a grep of Gaia, IFDEF_FIREFOX_SYNC seems to be the only current use > case, which seems like a perfect candidate for a more webby approach. Less > magic, more open. > > > > On Wed, Nov 25, 2015 at 10:15 AM, Eli Perelman <[email protected]> > wrote: > >> I'd have to agree with the sentiments against C-style pre-processing. >> Anything that breaks linting or an IDE's static analysis would make >> development a pain. >> >> Eli Perelman >> >> On Wed, Nov 25, 2015 at 11:55 AM, Sam Giles <[email protected]> wrote: >> >>> I was surprised having worked in m-c that Gaia wasn't using the C >>> pre-processor fwiw. >>> >>> But I think the fact it will break syntax is a show stopper - unless we >>> pre-process before linting - but the problem is deeper than that, I think >>> the approachability of the code base will be affected by this. Not because >>> the C pre-processor is obscure, I don't think it is at all, but because the >>> syntax is just different to what you might expect. I'd also be worried >>> about how easy it is to set up the toolchain for Windows developers. >>> >>> I don't see what the problem with the third party pre-processor proposed >>> is, it at least covers what we already have in a better way and despite >>> encasing the conditions in comments, is practically offering the same as >>> the C pre-processor–without macros 🙌. >>> >>> Sam >>> >>> On Wed, Nov 25, 2015 at 5:31 PM, David Flanagan <[email protected]> >>> wrote: >>> >>>> If there is a pre-processing system that is already familiar to the >>>> majority of web developers, I'd buy this argument. But I don't think there >>>> is. So most web developers who encounter preprocessing in FirefoxOS will >>>> have to learn our system from scratch. If that is true, then I'd favor the >>>> solution with 40+ years of use over something that someone just made up and >>>> posted on github. And if `#ifdef FOO` scares away contributors then I >>>> don't see how `<!-- @ifdef FOO -->` is any less scary! Its not like I'm >>>> suggesting we use m4 here. >>>> >>>> If the argument is that we need a preprocessor that we can run in node >>>> without invoking the shell, then maybe we can find a cpp implementation in >>>> node. >>>> >>>> Maybe we want a syntax that uses comments so that the code remains >>>> valid even before preprocessing so that linters and other tools don't get >>>> confused. That seems like a reason that we need something other than cpp. >>>> >>>> Greg thinks that we need a preprocessor that can do template expansion >>>> and looping. I find that surprising and a little scary, but I don't know >>>> what the use case is. >>>> >>>> Anyway, my point is that the C preprocessor is venerable and well >>>> understood by generations of programmers. IT seems to me that any >>>> discussion of "what preprocessor should we use" should begin with the >>>> question "can we just use cpp?" >>>> >>>> David >>>> >>>> >>>> >>>> On Wed, Nov 25, 2015 at 8:14 AM, Justin D'Arcangelo < >>>> [email protected]> wrote: >>>> >>>>> We should use a preprocessor that is familiar to web/JS devs. We're >>>>> trying to grow contributors, not scare them away. >>>>> >>>>> -Justin >>>>> >>>>> >>>>> On Nov 25, 2015, at 11:08 AM, David Flanagan <[email protected]> >>>>> wrote: >>>>> >>>>> Why can't we use the standard C preprocessor (with #if, #ifdef, >>>>> #define, and even #include) for this instead of adopting a new technology? >>>>> >>>>> David >>>>> >>>>> P.S. When we do adopt a preprocessor solution, I'm interested to >>>>> explore whether I can use it to include unit tests in the same file as the >>>>> code being tested. >>>>> >>>>> On Tue, Nov 24, 2015 at 9:54 PM, Fred Lin <[email protected]> wrote: >>>>> >>>>>> Seems we have kind of common agreement to reuse the third-party >>>>>> preprocess library[1]. >>>>>> >>>>>> Francisco has done some experiment port, and found the library has >>>>>> some node dependency. >>>>>> It also brings the request to have the node based build script. >>>>>> >>>>>> >>>>>> 1. https://github.com/jsoverson/preprocess >>>>>> <https://github.com/jsoverson/preprocess> >>>>>> >>>>>> >>>>>> regards >>>>>> -- >>>>>> Fred >>>>>> >>>>>> On Wed, Nov 18, 2015 at 10:40 PM, Francisco Jordano < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> +1 to this, >>>>>>> >>>>>>> several reasons to do it: >>>>>>> >>>>>>> - It support multiple languages (javascript, html, css, c, etc) >>>>>>> - You can combine as many options as you want. >>>>>>> - The options have value, which could add a complete new set of >>>>>>> cases, not just the binary one. >>>>>>> >>>>>>> Cheers, >>>>>>> f >>>>>>> >>>>>>> On 18 November 2015 at 14:07, Fred Lin <[email protected]> wrote: >>>>>>> >>>>>>>> In Gaia currently we have preprocessor.js[1] that support some >>>>>>>> syntax[2] to exclude/include HTML/JS/CSS in build time. >>>>>>>> >>>>>>>> With this tool, developer can exclude files, code sections from >>>>>>>> origin HTML/JS/CSS files to shape the source to fit more kinds of >>>>>>>> devices. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> html code.... >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> <!--IFDEF_FIREFOX_SYNC >>>>>>>> html code section >>>>>>>> ENDIF_SAMPLE--> >>>>>>>> >>>>>>>> The consideration during review is we can't put html related >>>>>>>> comments inside of <!-- -->, which make bad patten match and also make >>>>>>>> the >>>>>>>> editor cry. >>>>>>>> >>>>>>>> As my experience about other code mangler/optimizer, some of them >>>>>>>> support Ruby like start/end syntax, such as: >>>>>>>> >>>>>>>> <!-- @if NODE_ENV='production' --><script >>>>>>>> src="some/production/lib/like/analytics.js"></script><!-- @endif --> >>>>>>>> >>>>>>>> Which wrap target code section with start comment and end comment, >>>>>>>> therefore the origin source is still viewable in plain HTML. May we >>>>>>>> have >>>>>>>> something similar so we won't left orphan comments in HTML file? >>>>>>>> >>>>>>>> >>>>>>>> Another thought is since we can use npm modules now (Not 100% >>>>>>>> sure), why we don't reuse existing preprocessor[3] and send PR to them >>>>>>>> to >>>>>>>> leverage efforts from outside talents? >>>>>>>> >>>>>>>> >>>>>>>> 1. >>>>>>>> https://github.com/mozilla-b2g/gaia/blob/master/build/preprocessor.js >>>>>>>> 2. >>>>>>>> https://github.com/mozilla-b2g/gaia/blob/master/apps/settings/elements/root.html#L140 >>>>>>>> 3. https://github.com/jsoverson/preprocess >>>>>>>> >>>>>>>> regards >>>>>>>> -- >>>>>>>> Fred >>>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> dev-fxos mailing list >>>>>> [email protected] >>>>>> https://lists.mozilla.org/listinfo/dev-fxos >>>>>> >>>>>> >>>>> _______________________________________________ >>>>> dev-fxos mailing list >>>>> [email protected] >>>>> https://lists.mozilla.org/listinfo/dev-fxos >>>>> >>>>> >>>> >>>> _______________________________________________ >>>> dev-fxos mailing list >>>> [email protected] >>>> https://lists.mozilla.org/listinfo/dev-fxos >>>> >>>> >>> >>> _______________________________________________ >>> dev-fxos mailing list >>> [email protected] >>> https://lists.mozilla.org/listinfo/dev-fxos >>> >>> >> >> _______________________________________________ >> dev-fxos mailing list >> [email protected] >> https://lists.mozilla.org/listinfo/dev-fxos >> >> > >
_______________________________________________ dev-fxos mailing list [email protected] https://lists.mozilla.org/listinfo/dev-fxos

