[5.4] Where to put the require.config?

classic Classic list List threaded Threaded
11 messages Options
Reply | Threaded
Open this post in threaded view
|

[5.4] Where to put the require.config?

RuralHunter
Hi,

I'm testing tapestry 5.4. I'm wondering where to put the
requirejs.config code for my own modules and third-party modules?

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: [5.4] Where to put the require.config?

Chris Poulsen
In a javascript stack?

On Fri, Mar 20, 2015 at 4:05 AM, Rural Hunter <[hidden email]> wrote:

> Hi,
>
> I'm testing tapestry 5.4. I'm wondering where to put the requirejs.config
> code for my own modules and third-party modules?
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>
Reply | Threaded
Open this post in threaded view
|

Re: [5.4] Where to put the require.config?

RuralHunter
How to work out if I want to config the path of a third-party module if I
use js stack?

2015-03-20 17:07 GMT+08:00 Chris Poulsen <[hidden email]>:

> In a javascript stack?
>
> On Fri, Mar 20, 2015 at 4:05 AM, Rural Hunter <[hidden email]>
> wrote:
>
> > Hi,
> >
> > I'm testing tapestry 5.4. I'm wondering where to put the requirejs.config
> > code for my own modules and third-party modules?
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [hidden email]
> > For additional commands, e-mail: [hidden email]
> >
> >
>
Reply | Threaded
Open this post in threaded view
|

Re: [5.4] Where to put the require.config?

Chris Poulsen
Drop the 3rd party module in the usual place for modules
(classpath:META-INF/modules) and reference it.

http://tapestry.apache.org/javascript-rewrite.html has some info on the
infrastructure and the tapestry source code (setup of the core
stack/bootstrap modules etc. are good inspiration as well),




On Sat, Mar 21, 2015 at 4:19 PM, Rural Hunter <[hidden email]> wrote:

> How to work out if I want to config the path of a third-party module if I
> use js stack?
>
> 2015-03-20 17:07 GMT+08:00 Chris Poulsen <[hidden email]>:
>
> > In a javascript stack?
> >
> > On Fri, Mar 20, 2015 at 4:05 AM, Rural Hunter <[hidden email]>
> > wrote:
> >
> > > Hi,
> > >
> > > I'm testing tapestry 5.4. I'm wondering where to put the
> requirejs.config
> > > code for my own modules and third-party modules?
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [hidden email]
> > > For additional commands, e-mail: [hidden email]
> > >
> > >
> >
>
Reply | Threaded
Open this post in threaded view
|

Re: [5.4] Where to put the require.config?

RuralHunter
I already did that. The problem is this: I have a 3rd party module A. Both
my own code and another 3rd party module B depend on it. The standard
location of module A should be at classpath:META-INF/modules/ but it brings
in a lot of js files and sub-folders and makes the module root path(
classpath:META-INF/modules) a bit messy. So I want to put module A at
classpath:META-INF/modules/A. How can I achieve it?

2015-03-22 18:39 GMT+08:00 Chris Poulsen <[hidden email]>:

> Drop the 3rd party module in the usual place for modules
> (classpath:META-INF/modules) and reference it.
>
> http://tapestry.apache.org/javascript-rewrite.html has some info on the
> infrastructure and the tapestry source code (setup of the core
> stack/bootstrap modules etc. are good inspiration as well),
>
>
>
>
> On Sat, Mar 21, 2015 at 4:19 PM, Rural Hunter <[hidden email]>
> wrote:
>
> > How to work out if I want to config the path of a third-party module if I
> > use js stack?
> >
> > 2015-03-20 17:07 GMT+08:00 Chris Poulsen <[hidden email]>:
> >
> > > In a javascript stack?
> > >
> > > On Fri, Mar 20, 2015 at 4:05 AM, Rural Hunter <[hidden email]>
> > > wrote:
> > >
> > > > Hi,
> > > >
> > > > I'm testing tapestry 5.4. I'm wondering where to put the
> > requirejs.config
> > > > code for my own modules and third-party modules?
> > > >
> > > > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: [hidden email]
> > > > For additional commands, e-mail: [hidden email]
> > > >
> > > >
> > >
> >
>
Reply | Threaded
Open this post in threaded view
|

Re: [5.4] Where to put the require.config?

JumpStart
Let's say "a" and its associated files are in a folder called a-1.0.0. Try dropping the folder into META-INF/assets and shim it by contributing to ModuleManager:

        public static void contributeModuleManager(
                        MappedConfiguration<String, Object> configuration,
                        @Path("/META-INF/assets/a-1.0.0/a.js") Resource a,
                        ...)

                configuration.add("a", new JavaScriptModuleConfiguration(a).dependsOn("whatever"));
                ...
                }

Now you can refer to it as module "a". If a.js was already an AMD-compliant module, that's fine, RequireJS will figure handle it. If a.js already does *require("whatever")* then you can leave out the .dependsOn("whatever") shown above.

If it has css files, you might like to put them in a JavaScriptStack so that their path is kept in one place.

public class ASupportStack implements JavaScriptStack {

        private final AssetSource assetSource;

        public ASupportStack(final AssetSource assetSource) {
                this.assetSource = assetSource;
        }

        public String getInitialization() {
                return null;
        }

        public List<Asset> getJavaScriptLibraries() {
                List<Asset> ret = new ArrayList<>();
                return ret;
        }

        public List<StylesheetLink> getStylesheets() {
                List<StylesheetLink> ret = new ArrayList<>();

                ret.add(new StylesheetLink(assetSource
                                .getClasspathAsset("/META-INF/assets/a-1.0.0/a.css")));
                ret.add(new StylesheetLink(assetSource
                                .getClasspathAsset("/META-INF/assets/a-1.0.0/a.print.css"),
                                new StylesheetOptions("print")));

                return ret;
        }

        public List<String> getStacks() {
                return Collections.emptyList();
        }

        @Override
        public List<String> getModules() {
                return Collections.emptyList();
        }

}

In AppModule:

        public static void contributeJavaScriptStackSource(MappedConfiguration<String, JavaScriptStack> configuration) {
                configuration.addInstance("ASupportStack", ASupportStack.class);
        }

In each page or component that uses module "a", either @Import the stylesheets or @Import the JavaScriptStack. I wish there was a way that would import it for you every time refer to module "a" but I don't know of one.

I hope this is helping.

Geoff

On 23 Mar 2015, at 1:06 pm, Rural Hunter <[hidden email]> wrote:

> I already did that. The problem is this: I have a 3rd party module A. Both
> my own code and another 3rd party module B depend on it. The standard
> location of module A should be at classpath:META-INF/modules/ but it brings
> in a lot of js files and sub-folders and makes the module root path(
> classpath:META-INF/modules) a bit messy. So I want to put module A at
> classpath:META-INF/modules/A. How can I achieve it?
>
> 2015-03-22 18:39 GMT+08:00 Chris Poulsen <[hidden email]>:
>
>> Drop the 3rd party module in the usual place for modules
>> (classpath:META-INF/modules) and reference it.
>>
>> http://tapestry.apache.org/javascript-rewrite.html has some info on the
>> infrastructure and the tapestry source code (setup of the core
>> stack/bootstrap modules etc. are good inspiration as well),
>>
>>
>>
>>
>> On Sat, Mar 21, 2015 at 4:19 PM, Rural Hunter <[hidden email]>
>> wrote:
>>
>>> How to work out if I want to config the path of a third-party module if I
>>> use js stack?
>>>
>>> 2015-03-20 17:07 GMT+08:00 Chris Poulsen <[hidden email]>:
>>>
>>>> In a javascript stack?
>>>>
>>>> On Fri, Mar 20, 2015 at 4:05 AM, Rural Hunter <[hidden email]>
>>>> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> I'm testing tapestry 5.4. I'm wondering where to put the
>>> requirejs.config
>>>>> code for my own modules and third-party modules?
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: [hidden email]
>>>>> For additional commands, e-mail: [hidden email]
>>>>>
>>>>>
>>>>
>>>
>>

Reply | Threaded
Open this post in threaded view
|

Re: [5.4] Where to put the require.config?

RuralHunter
Hi Geoff,

Thanks so much for the detailed guide. My module A is AMD-compliant and has
no css files. I tried your solution in AppModule. It did resolved the
problem for A.js itself. But the A.js depends on many files in it's sub
directories. I checke the source of A.js and it's like this:
        require('./dep/excanvas');
        var util = require('./tool/util');
        var log = require('./tool/log');
        var guid = require('./tool/guid');

I got 404 for all the access to those dependencies. How to solve this?


2015-03-23 10:56 GMT+08:00 Geoff Callender <
[hidden email]>:

> Let's say "a" and its associated files are in a folder called a-1.0.0. Try
> dropping the folder into META-INF/assets and shim it by contributing to
> ModuleManager:
>
>         public static void contributeModuleManager(
>                         MappedConfiguration<String, Object> configuration,
>                         @Path("/META-INF/assets/a-1.0.0/a.js") Resource a,
>                         ...)
>
>                 configuration.add("a", new
> JavaScriptModuleConfiguration(a).dependsOn("whatever"));
>                 ...
>                 }
>
> Now you can refer to it as module "a". If a.js was already an
> AMD-compliant module, that's fine, RequireJS will figure handle it. If a.js
> already does *require("whatever")* then you can leave out the
> .dependsOn("whatever") shown above.
>
> If it has css files, you might like to put them in a JavaScriptStack so
> that their path is kept in one place.
>
> public class ASupportStack implements JavaScriptStack {
>
>         private final AssetSource assetSource;
>
>         public ASupportStack(final AssetSource assetSource) {
>                 this.assetSource = assetSource;
>         }
>
>         public String getInitialization() {
>                 return null;
>         }
>
>         public List<Asset> getJavaScriptLibraries() {
>                 List<Asset> ret = new ArrayList<>();
>                 return ret;
>         }
>
>         public List<StylesheetLink> getStylesheets() {
>                 List<StylesheetLink> ret = new ArrayList<>();
>
>                 ret.add(new StylesheetLink(assetSource
>
> .getClasspathAsset("/META-INF/assets/a-1.0.0/a.css")));
>                 ret.add(new StylesheetLink(assetSource
>
> .getClasspathAsset("/META-INF/assets/a-1.0.0/a.print.css"),
>                                 new StylesheetOptions("print")));
>
>                 return ret;
>         }
>
>         public List<String> getStacks() {
>                 return Collections.emptyList();
>         }
>
>         @Override
>         public List<String> getModules() {
>                 return Collections.emptyList();
>         }
>
> }
>
> In AppModule:
>
>         public static void
> contributeJavaScriptStackSource(MappedConfiguration<String,
> JavaScriptStack> configuration) {
>                 configuration.addInstance("ASupportStack",
> ASupportStack.class);
>         }
>
> In each page or component that uses module "a", either @Import the
> stylesheets or @Import the JavaScriptStack. I wish there was a way that
> would import it for you every time refer to module "a" but I don't know of
> one.
>
> I hope this is helping.
>
> Geoff
>
> On 23 Mar 2015, at 1:06 pm, Rural Hunter <[hidden email]> wrote:
>
> > I already did that. The problem is this: I have a 3rd party module A.
> Both
> > my own code and another 3rd party module B depend on it. The standard
> > location of module A should be at classpath:META-INF/modules/ but it
> brings
> > in a lot of js files and sub-folders and makes the module root path(
> > classpath:META-INF/modules) a bit messy. So I want to put module A at
> > classpath:META-INF/modules/A. How can I achieve it?
> >
> > 2015-03-22 18:39 GMT+08:00 Chris Poulsen <[hidden email]>:
> >
> >> Drop the 3rd party module in the usual place for modules
> >> (classpath:META-INF/modules) and reference it.
> >>
> >> http://tapestry.apache.org/javascript-rewrite.html has some info on the
> >> infrastructure and the tapestry source code (setup of the core
> >> stack/bootstrap modules etc. are good inspiration as well),
> >>
> >>
> >>
> >>
> >> On Sat, Mar 21, 2015 at 4:19 PM, Rural Hunter <[hidden email]>
> >> wrote:
> >>
> >>> How to work out if I want to config the path of a third-party module
> if I
> >>> use js stack?
> >>>
> >>> 2015-03-20 17:07 GMT+08:00 Chris Poulsen <[hidden email]>:
> >>>
> >>>> In a javascript stack?
> >>>>
> >>>> On Fri, Mar 20, 2015 at 4:05 AM, Rural Hunter <[hidden email]>
> >>>> wrote:
> >>>>
> >>>>> Hi,
> >>>>>
> >>>>> I'm testing tapestry 5.4. I'm wondering where to put the
> >>> requirejs.config
> >>>>> code for my own modules and third-party modules?
> >>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>> To unsubscribe, e-mail: [hidden email]
> >>>>> For additional commands, e-mail: [hidden email]
> >>>>>
> >>>>>
> >>>>
> >>>
> >>
>
>
Reply | Threaded
Open this post in threaded view
|

Re: [5.4] Where to put the require.config?

JumpStart
Very good question. It's trying to lazy load from the local context. So far I've managed to sidestep modules that do that. I'll have a look into it.

On 23 Mar 2015, at 5:56 pm, Rural Hunter <[hidden email]> wrote:

> Hi Geoff,
>
> Thanks so much for the detailed guide. My module A is AMD-compliant and has
> no css files. I tried your solution in AppModule. It did resolved the
> problem for A.js itself. But the A.js depends on many files in it's sub
> directories. I checke the source of A.js and it's like this:
>        require('./dep/excanvas');
>        var util = require('./tool/util');
>        var log = require('./tool/log');
>        var guid = require('./tool/guid');
>
> I got 404 for all the access to those dependencies. How to solve this?
>
>
> 2015-03-23 10:56 GMT+08:00 Geoff Callender <
> [hidden email]>:
>
>> Let's say "a" and its associated files are in a folder called a-1.0.0. Try
>> dropping the folder into META-INF/assets and shim it by contributing to
>> ModuleManager:
>>
>>        public static void contributeModuleManager(
>>                        MappedConfiguration<String, Object> configuration,
>>                        @Path("/META-INF/assets/a-1.0.0/a.js") Resource a,
>>                        ...)
>>
>>                configuration.add("a", new
>> JavaScriptModuleConfiguration(a).dependsOn("whatever"));
>>                ...
>>                }
>>
>> Now you can refer to it as module "a". If a.js was already an
>> AMD-compliant module, that's fine, RequireJS will figure handle it. If a.js
>> already does *require("whatever")* then you can leave out the
>> .dependsOn("whatever") shown above.
>>
>> If it has css files, you might like to put them in a JavaScriptStack so
>> that their path is kept in one place.
>>
>> public class ASupportStack implements JavaScriptStack {
>>
>>        private final AssetSource assetSource;
>>
>>        public ASupportStack(final AssetSource assetSource) {
>>                this.assetSource = assetSource;
>>        }
>>
>>        public String getInitialization() {
>>                return null;
>>        }
>>
>>        public List<Asset> getJavaScriptLibraries() {
>>                List<Asset> ret = new ArrayList<>();
>>                return ret;
>>        }
>>
>>        public List<StylesheetLink> getStylesheets() {
>>                List<StylesheetLink> ret = new ArrayList<>();
>>
>>                ret.add(new StylesheetLink(assetSource
>>
>> .getClasspathAsset("/META-INF/assets/a-1.0.0/a.css")));
>>                ret.add(new StylesheetLink(assetSource
>>
>> .getClasspathAsset("/META-INF/assets/a-1.0.0/a.print.css"),
>>                                new StylesheetOptions("print")));
>>
>>                return ret;
>>        }
>>
>>        public List<String> getStacks() {
>>                return Collections.emptyList();
>>        }
>>
>>        @Override
>>        public List<String> getModules() {
>>                return Collections.emptyList();
>>        }
>>
>> }
>>
>> In AppModule:
>>
>>        public static void
>> contributeJavaScriptStackSource(MappedConfiguration<String,
>> JavaScriptStack> configuration) {
>>                configuration.addInstance("ASupportStack",
>> ASupportStack.class);
>>        }
>>
>> In each page or component that uses module "a", either @Import the
>> stylesheets or @Import the JavaScriptStack. I wish there was a way that
>> would import it for you every time refer to module "a" but I don't know of
>> one.
>>
>> I hope this is helping.
>>
>> Geoff
>>
>> On 23 Mar 2015, at 1:06 pm, Rural Hunter <[hidden email]> wrote:
>>
>>> I already did that. The problem is this: I have a 3rd party module A.
>> Both
>>> my own code and another 3rd party module B depend on it. The standard
>>> location of module A should be at classpath:META-INF/modules/ but it
>> brings
>>> in a lot of js files and sub-folders and makes the module root path(
>>> classpath:META-INF/modules) a bit messy. So I want to put module A at
>>> classpath:META-INF/modules/A. How can I achieve it?
>>>
>>> 2015-03-22 18:39 GMT+08:00 Chris Poulsen <[hidden email]>:
>>>
>>>> Drop the 3rd party module in the usual place for modules
>>>> (classpath:META-INF/modules) and reference it.
>>>>
>>>> http://tapestry.apache.org/javascript-rewrite.html has some info on the
>>>> infrastructure and the tapestry source code (setup of the core
>>>> stack/bootstrap modules etc. are good inspiration as well),
>>>>
>>>>
>>>>
>>>>
>>>> On Sat, Mar 21, 2015 at 4:19 PM, Rural Hunter <[hidden email]>
>>>> wrote:
>>>>
>>>>> How to work out if I want to config the path of a third-party module
>> if I
>>>>> use js stack?
>>>>>
>>>>> 2015-03-20 17:07 GMT+08:00 Chris Poulsen <[hidden email]>:
>>>>>
>>>>>> In a javascript stack?
>>>>>>
>>>>>> On Fri, Mar 20, 2015 at 4:05 AM, Rural Hunter <[hidden email]>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I'm testing tapestry 5.4. I'm wondering where to put the
>>>>> requirejs.config
>>>>>>> code for my own modules and third-party modules?
>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail: [hidden email]
>>>>>>> For additional commands, e-mail: [hidden email]
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>
>>


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: [5.4] Where to put the require.config?

JumpStart
if you look at the Network view in Chrome's Web Inspector I think you'll find it's trying to GET these:

/yourapp/modules.gz/dep/canvas.js
/yourapp/modules.gz/tool/util.js
/yourapp/modules.gz/tool/log.js
/yourapp/modules.gz/tool/guid.js

It's hoping to find them in META-INF/modules/ but they're not there. The solution is to make it look like they're there by shimming them all! For example:

      public static void contributeModuleManager(
                      MappedConfiguration<String, Object> configuration,
                      @Path("/META-INF/assets/a-1.0.0/a.js") Resource a,
                      @Path("/META-INF/assets/a-1.0.0/dep/canvas.js") Resource depCanvas,
                      @Path("/META-INF/assets/a-1.0.0/tool/util.js") Resource toolUtil,
                      ...)

              configuration.add("a", new JavaScriptModuleConfiguration(a));
              configuration.add("dep/canvas", new JavaScriptModuleConfiguration(depCanvas));
              configuration.add("tool/util", new JavaScriptModuleConfiguration(toolUtil));
              ...
      }

Cheers,

Geoff

On 24 Mar 2015, at 3:59 pm, Geoff Callender <[hidden email]> wrote:

> Very good question. It's trying to lazy load from the local context. So far I've managed to sidestep modules that do that. I'll have a look into it.
>
> On 23 Mar 2015, at 5:56 pm, Rural Hunter <[hidden email]> wrote:
>
>> Hi Geoff,
>>
>> Thanks so much for the detailed guide. My module A is AMD-compliant and has
>> no css files. I tried your solution in AppModule. It did resolved the
>> problem for A.js itself. But the A.js depends on many files in it's sub
>> directories. I checke the source of A.js and it's like this:
>>       require('./dep/excanvas');
>>       var util = require('./tool/util');
>>       var log = require('./tool/log');
>>       var guid = require('./tool/guid');
>>
>> I got 404 for all the access to those dependencies. How to solve this?
>>
>>
>> 2015-03-23 10:56 GMT+08:00 Geoff Callender <
>> [hidden email]>:
>>
>>> Let's say "a" and its associated files are in a folder called a-1.0.0. Try
>>> dropping the folder into META-INF/assets and shim it by contributing to
>>> ModuleManager:
>>>
>>>       public static void contributeModuleManager(
>>>                       MappedConfiguration<String, Object> configuration,
>>>                       @Path("/META-INF/assets/a-1.0.0/a.js") Resource a,
>>>                       ...)
>>>
>>>               configuration.add("a", new
>>> JavaScriptModuleConfiguration(a).dependsOn("whatever"));
>>>               ...
>>>               }
>>>
>>> Now you can refer to it as module "a". If a.js was already an
>>> AMD-compliant module, that's fine, RequireJS will figure handle it. If a.js
>>> already does *require("whatever")* then you can leave out the
>>> .dependsOn("whatever") shown above.
>>>
>>> If it has css files, you might like to put them in a JavaScriptStack so
>>> that their path is kept in one place.
>>>
>>> public class ASupportStack implements JavaScriptStack {
>>>
>>>       private final AssetSource assetSource;
>>>
>>>       public ASupportStack(final AssetSource assetSource) {
>>>               this.assetSource = assetSource;
>>>       }
>>>
>>>       public String getInitialization() {
>>>               return null;
>>>       }
>>>
>>>       public List<Asset> getJavaScriptLibraries() {
>>>               List<Asset> ret = new ArrayList<>();
>>>               return ret;
>>>       }
>>>
>>>       public List<StylesheetLink> getStylesheets() {
>>>               List<StylesheetLink> ret = new ArrayList<>();
>>>
>>>               ret.add(new StylesheetLink(assetSource
>>>
>>> .getClasspathAsset("/META-INF/assets/a-1.0.0/a.css")));
>>>               ret.add(new StylesheetLink(assetSource
>>>
>>> .getClasspathAsset("/META-INF/assets/a-1.0.0/a.print.css"),
>>>                               new StylesheetOptions("print")));
>>>
>>>               return ret;
>>>       }
>>>
>>>       public List<String> getStacks() {
>>>               return Collections.emptyList();
>>>       }
>>>
>>>       @Override
>>>       public List<String> getModules() {
>>>               return Collections.emptyList();
>>>       }
>>>
>>> }
>>>
>>> In AppModule:
>>>
>>>       public static void
>>> contributeJavaScriptStackSource(MappedConfiguration<String,
>>> JavaScriptStack> configuration) {
>>>               configuration.addInstance("ASupportStack",
>>> ASupportStack.class);
>>>       }
>>>
>>> In each page or component that uses module "a", either @Import the
>>> stylesheets or @Import the JavaScriptStack. I wish there was a way that
>>> would import it for you every time refer to module "a" but I don't know of
>>> one.
>>>
>>> I hope this is helping.
>>>
>>> Geoff
>>>
>>> On 23 Mar 2015, at 1:06 pm, Rural Hunter <[hidden email]> wrote:
>>>
>>>> I already did that. The problem is this: I have a 3rd party module A.
>>> Both
>>>> my own code and another 3rd party module B depend on it. The standard
>>>> location of module A should be at classpath:META-INF/modules/ but it
>>> brings
>>>> in a lot of js files and sub-folders and makes the module root path(
>>>> classpath:META-INF/modules) a bit messy. So I want to put module A at
>>>> classpath:META-INF/modules/A. How can I achieve it?
>>>>
>>>> 2015-03-22 18:39 GMT+08:00 Chris Poulsen <[hidden email]>:
>>>>
>>>>> Drop the 3rd party module in the usual place for modules
>>>>> (classpath:META-INF/modules) and reference it.
>>>>>
>>>>> http://tapestry.apache.org/javascript-rewrite.html has some info on the
>>>>> infrastructure and the tapestry source code (setup of the core
>>>>> stack/bootstrap modules etc. are good inspiration as well),
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Sat, Mar 21, 2015 at 4:19 PM, Rural Hunter <[hidden email]>
>>>>> wrote:
>>>>>
>>>>>> How to work out if I want to config the path of a third-party module
>>> if I
>>>>>> use js stack?
>>>>>>
>>>>>> 2015-03-20 17:07 GMT+08:00 Chris Poulsen <[hidden email]>:
>>>>>>
>>>>>>> In a javascript stack?
>>>>>>>
>>>>>>> On Fri, Mar 20, 2015 at 4:05 AM, Rural Hunter <[hidden email]>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I'm testing tapestry 5.4. I'm wondering where to put the
>>>>>> requirejs.config
>>>>>>>> code for my own modules and third-party modules?
>>>>>>>>
>>>>>>>> ---------------------------------------------------------------------
>>>>>>>> To unsubscribe, e-mail: [hidden email]
>>>>>>>> For additional commands, e-mail: [hidden email]
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>
>>>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: [5.4] Where to put the require.config?

RuralHunter
Yes I can do that. But I think it's too much and I need to debug the
requests to find all those dependencies. This can be a workaround but
doesn't look like a neat solution. Is it possible to make this happen
automatically by Tapestry itself?

2015-03-24 20:05 GMT+08:00 Geoff Callender <
[hidden email]>:

> if you look at the Network view in Chrome's Web Inspector I think you'll
> find it's trying to GET these:
>
> /yourapp/modules.gz/dep/canvas.js
> /yourapp/modules.gz/tool/util.js
> /yourapp/modules.gz/tool/log.js
> /yourapp/modules.gz/tool/guid.js
>
> It's hoping to find them in META-INF/modules/ but they're not there. The
> solution is to make it look like they're there by shimming them all! For
> example:
>
>       public static void contributeModuleManager(
>                       MappedConfiguration<String, Object> configuration,
>                       @Path("/META-INF/assets/a-1.0.0/a.js") Resource a,
>                       @Path("/META-INF/assets/a-1.0.0/dep/canvas.js")
> Resource depCanvas,
>                       @Path("/META-INF/assets/a-1.0.0/tool/util.js")
> Resource toolUtil,
>                       ...)
>
>               configuration.add("a", new JavaScriptModuleConfiguration(a));
>               configuration.add("dep/canvas", new
> JavaScriptModuleConfiguration(depCanvas));
>               configuration.add("tool/util", new
> JavaScriptModuleConfiguration(toolUtil));
>               ...
>       }
>
> Cheers,
>
> Geoff
>
> On 24 Mar 2015, at 3:59 pm, Geoff Callender <
> [hidden email]> wrote:
>
> > Very good question. It's trying to lazy load from the local context. So
> far I've managed to sidestep modules that do that. I'll have a look into it.
> >
> > On 23 Mar 2015, at 5:56 pm, Rural Hunter <[hidden email]> wrote:
> >
> >> Hi Geoff,
> >>
> >> Thanks so much for the detailed guide. My module A is AMD-compliant and
> has
> >> no css files. I tried your solution in AppModule. It did resolved the
> >> problem for A.js itself. But the A.js depends on many files in it's sub
> >> directories. I checke the source of A.js and it's like this:
> >>       require('./dep/excanvas');
> >>       var util = require('./tool/util');
> >>       var log = require('./tool/log');
> >>       var guid = require('./tool/guid');
> >>
> >> I got 404 for all the access to those dependencies. How to solve this?
> >>
> >>
> >> 2015-03-23 10:56 GMT+08:00 Geoff Callender <
> >> [hidden email]>:
> >>
> >>> Let's say "a" and its associated files are in a folder called a-1.0.0.
> Try
> >>> dropping the folder into META-INF/assets and shim it by contributing to
> >>> ModuleManager:
> >>>
> >>>       public static void contributeModuleManager(
> >>>                       MappedConfiguration<String, Object>
> configuration,
> >>>                       @Path("/META-INF/assets/a-1.0.0/a.js") Resource
> a,
> >>>                       ...)
> >>>
> >>>               configuration.add("a", new
> >>> JavaScriptModuleConfiguration(a).dependsOn("whatever"));
> >>>               ...
> >>>               }
> >>>
> >>> Now you can refer to it as module "a". If a.js was already an
> >>> AMD-compliant module, that's fine, RequireJS will figure handle it. If
> a.js
> >>> already does *require("whatever")* then you can leave out the
> >>> .dependsOn("whatever") shown above.
> >>>
> >>> If it has css files, you might like to put them in a JavaScriptStack so
> >>> that their path is kept in one place.
> >>>
> >>> public class ASupportStack implements JavaScriptStack {
> >>>
> >>>       private final AssetSource assetSource;
> >>>
> >>>       public ASupportStack(final AssetSource assetSource) {
> >>>               this.assetSource = assetSource;
> >>>       }
> >>>
> >>>       public String getInitialization() {
> >>>               return null;
> >>>       }
> >>>
> >>>       public List<Asset> getJavaScriptLibraries() {
> >>>               List<Asset> ret = new ArrayList<>();
> >>>               return ret;
> >>>       }
> >>>
> >>>       public List<StylesheetLink> getStylesheets() {
> >>>               List<StylesheetLink> ret = new ArrayList<>();
> >>>
> >>>               ret.add(new StylesheetLink(assetSource
> >>>
> >>> .getClasspathAsset("/META-INF/assets/a-1.0.0/a.css")));
> >>>               ret.add(new StylesheetLink(assetSource
> >>>
> >>> .getClasspathAsset("/META-INF/assets/a-1.0.0/a.print.css"),
> >>>                               new StylesheetOptions("print")));
> >>>
> >>>               return ret;
> >>>       }
> >>>
> >>>       public List<String> getStacks() {
> >>>               return Collections.emptyList();
> >>>       }
> >>>
> >>>       @Override
> >>>       public List<String> getModules() {
> >>>               return Collections.emptyList();
> >>>       }
> >>>
> >>> }
> >>>
> >>> In AppModule:
> >>>
> >>>       public static void
> >>> contributeJavaScriptStackSource(MappedConfiguration<String,
> >>> JavaScriptStack> configuration) {
> >>>               configuration.addInstance("ASupportStack",
> >>> ASupportStack.class);
> >>>       }
> >>>
> >>> In each page or component that uses module "a", either @Import the
> >>> stylesheets or @Import the JavaScriptStack. I wish there was a way that
> >>> would import it for you every time refer to module "a" but I don't
> know of
> >>> one.
> >>>
> >>> I hope this is helping.
> >>>
> >>> Geoff
> >>>
> >>> On 23 Mar 2015, at 1:06 pm, Rural Hunter <[hidden email]>
> wrote:
> >>>
> >>>> I already did that. The problem is this: I have a 3rd party module A.
> >>> Both
> >>>> my own code and another 3rd party module B depend on it. The standard
> >>>> location of module A should be at classpath:META-INF/modules/ but it
> >>> brings
> >>>> in a lot of js files and sub-folders and makes the module root path(
> >>>> classpath:META-INF/modules) a bit messy. So I want to put module A at
> >>>> classpath:META-INF/modules/A. How can I achieve it?
> >>>>
> >>>> 2015-03-22 18:39 GMT+08:00 Chris Poulsen <[hidden email]>:
> >>>>
> >>>>> Drop the 3rd party module in the usual place for modules
> >>>>> (classpath:META-INF/modules) and reference it.
> >>>>>
> >>>>> http://tapestry.apache.org/javascript-rewrite.html has some info on
> the
> >>>>> infrastructure and the tapestry source code (setup of the core
> >>>>> stack/bootstrap modules etc. are good inspiration as well),
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> On Sat, Mar 21, 2015 at 4:19 PM, Rural Hunter <[hidden email]
> >
> >>>>> wrote:
> >>>>>
> >>>>>> How to work out if I want to config the path of a third-party module
> >>> if I
> >>>>>> use js stack?
> >>>>>>
> >>>>>> 2015-03-20 17:07 GMT+08:00 Chris Poulsen <[hidden email]>:
> >>>>>>
> >>>>>>> In a javascript stack?
> >>>>>>>
> >>>>>>> On Fri, Mar 20, 2015 at 4:05 AM, Rural Hunter <
> [hidden email]>
> >>>>>>> wrote:
> >>>>>>>
> >>>>>>>> Hi,
> >>>>>>>>
> >>>>>>>> I'm testing tapestry 5.4. I'm wondering where to put the
> >>>>>> requirejs.config
> >>>>>>>> code for my own modules and third-party modules?
> >>>>>>>>
> >>>>>>>>
> ---------------------------------------------------------------------
> >>>>>>>> To unsubscribe, e-mail: [hidden email]
> >>>>>>>> For additional commands, e-mail: [hidden email]
> >>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>
> >>>
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>
Reply | Threaded
Open this post in threaded view
|

Re: [5.4] Where to put the require.config?

JumpStart
Instead of debug, can't you just search for "require(" in all js files in the subfolders of a-1.0.0/? It's a solution that might not be resilient to new versions of "a", but it is a solution.

I think I'm right in saying that none of this would be necessary if we could just drop the whole folder, eg. a-1.0.0/, into META-INF/modules/ and shim the top level, eg. "a" = "a-1.0.0/a.js", Then all of its "require" operations would work.

So, does anyone know a way to shim items that are inside META-INF/modules/?

On 25 Mar 2015, at 12:12 pm, Rural Hunter <[hidden email]> wrote:

> Yes I can do that. But I think it's too much and I need to debug the
> requests to find all those dependencies. This can be a workaround but
> doesn't look like a neat solution. Is it possible to make this happen
> automatically by Tapestry itself?
>
> 2015-03-24 20:05 GMT+08:00 Geoff Callender <
> [hidden email]>:
>
>> if you look at the Network view in Chrome's Web Inspector I think you'll
>> find it's trying to GET these:
>>
>> /yourapp/modules.gz/dep/canvas.js
>> /yourapp/modules.gz/tool/util.js
>> /yourapp/modules.gz/tool/log.js
>> /yourapp/modules.gz/tool/guid.js
>>
>> It's hoping to find them in META-INF/modules/ but they're not there. The
>> solution is to make it look like they're there by shimming them all! For
>> example:
>>
>>      public static void contributeModuleManager(
>>                      MappedConfiguration<String, Object> configuration,
>>                      @Path("/META-INF/assets/a-1.0.0/a.js") Resource a,
>>                      @Path("/META-INF/assets/a-1.0.0/dep/canvas.js")
>> Resource depCanvas,
>>                      @Path("/META-INF/assets/a-1.0.0/tool/util.js")
>> Resource toolUtil,
>>                      ...)
>>
>>              configuration.add("a", new JavaScriptModuleConfiguration(a));
>>              configuration.add("dep/canvas", new
>> JavaScriptModuleConfiguration(depCanvas));
>>              configuration.add("tool/util", new
>> JavaScriptModuleConfiguration(toolUtil));
>>              ...
>>      }
>>
>> Cheers,
>>
>> Geoff
>>
>> On 24 Mar 2015, at 3:59 pm, Geoff Callender <
>> [hidden email]> wrote:
>>
>>> Very good question. It's trying to lazy load from the local context. So
>> far I've managed to sidestep modules that do that. I'll have a look into it.
>>>
>>> On 23 Mar 2015, at 5:56 pm, Rural Hunter <[hidden email]> wrote:
>>>
>>>> Hi Geoff,
>>>>
>>>> Thanks so much for the detailed guide. My module A is AMD-compliant and
>> has
>>>> no css files. I tried your solution in AppModule. It did resolved the
>>>> problem for A.js itself. But the A.js depends on many files in it's sub
>>>> directories. I checke the source of A.js and it's like this:
>>>>      require('./dep/excanvas');
>>>>      var util = require('./tool/util');
>>>>      var log = require('./tool/log');
>>>>      var guid = require('./tool/guid');
>>>>
>>>> I got 404 for all the access to those dependencies. How to solve this?
>>>>
>>>>
>>>> 2015-03-23 10:56 GMT+08:00 Geoff Callender <
>>>> [hidden email]>:
>>>>
>>>>> Let's say "a" and its associated files are in a folder called a-1.0.0.
>> Try
>>>>> dropping the folder into META-INF/assets and shim it by contributing to
>>>>> ModuleManager:
>>>>>
>>>>>      public static void contributeModuleManager(
>>>>>                      MappedConfiguration<String, Object>
>> configuration,
>>>>>                      @Path("/META-INF/assets/a-1.0.0/a.js") Resource
>> a,
>>>>>                      ...)
>>>>>
>>>>>              configuration.add("a", new
>>>>> JavaScriptModuleConfiguration(a).dependsOn("whatever"));
>>>>>              ...
>>>>>              }
>>>>>
>>>>> Now you can refer to it as module "a". If a.js was already an
>>>>> AMD-compliant module, that's fine, RequireJS will figure handle it. If
>> a.js
>>>>> already does *require("whatever")* then you can leave out the
>>>>> .dependsOn("whatever") shown above.
>>>>>
>>>>> If it has css files, you might like to put them in a JavaScriptStack so
>>>>> that their path is kept in one place.
>>>>>
>>>>> public class ASupportStack implements JavaScriptStack {
>>>>>
>>>>>      private final AssetSource assetSource;
>>>>>
>>>>>      public ASupportStack(final AssetSource assetSource) {
>>>>>              this.assetSource = assetSource;
>>>>>      }
>>>>>
>>>>>      public String getInitialization() {
>>>>>              return null;
>>>>>      }
>>>>>
>>>>>      public List<Asset> getJavaScriptLibraries() {
>>>>>              List<Asset> ret = new ArrayList<>();
>>>>>              return ret;
>>>>>      }
>>>>>
>>>>>      public List<StylesheetLink> getStylesheets() {
>>>>>              List<StylesheetLink> ret = new ArrayList<>();
>>>>>
>>>>>              ret.add(new StylesheetLink(assetSource
>>>>>
>>>>> .getClasspathAsset("/META-INF/assets/a-1.0.0/a.css")));
>>>>>              ret.add(new StylesheetLink(assetSource
>>>>>
>>>>> .getClasspathAsset("/META-INF/assets/a-1.0.0/a.print.css"),
>>>>>                              new StylesheetOptions("print")));
>>>>>
>>>>>              return ret;
>>>>>      }
>>>>>
>>>>>      public List<String> getStacks() {
>>>>>              return Collections.emptyList();
>>>>>      }
>>>>>
>>>>>      @Override
>>>>>      public List<String> getModules() {
>>>>>              return Collections.emptyList();
>>>>>      }
>>>>>
>>>>> }
>>>>>
>>>>> In AppModule:
>>>>>
>>>>>      public static void
>>>>> contributeJavaScriptStackSource(MappedConfiguration<String,
>>>>> JavaScriptStack> configuration) {
>>>>>              configuration.addInstance("ASupportStack",
>>>>> ASupportStack.class);
>>>>>      }
>>>>>
>>>>> In each page or component that uses module "a", either @Import the
>>>>> stylesheets or @Import the JavaScriptStack. I wish there was a way that
>>>>> would import it for you every time refer to module "a" but I don't
>> know of
>>>>> one.
>>>>>
>>>>> I hope this is helping.
>>>>>
>>>>> Geoff
>>>>>
>>>>> On 23 Mar 2015, at 1:06 pm, Rural Hunter <[hidden email]>
>> wrote:
>>>>>
>>>>>> I already did that. The problem is this: I have a 3rd party module A.
>>>>> Both
>>>>>> my own code and another 3rd party module B depend on it. The standard
>>>>>> location of module A should be at classpath:META-INF/modules/ but it
>>>>> brings
>>>>>> in a lot of js files and sub-folders and makes the module root path(
>>>>>> classpath:META-INF/modules) a bit messy. So I want to put module A at
>>>>>> classpath:META-INF/modules/A. How can I achieve it?
>>>>>>
>>>>>> 2015-03-22 18:39 GMT+08:00 Chris Poulsen <[hidden email]>:
>>>>>>
>>>>>>> Drop the 3rd party module in the usual place for modules
>>>>>>> (classpath:META-INF/modules) and reference it.
>>>>>>>
>>>>>>> http://tapestry.apache.org/javascript-rewrite.html has some info on
>> the
>>>>>>> infrastructure and the tapestry source code (setup of the core
>>>>>>> stack/bootstrap modules etc. are good inspiration as well),
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Sat, Mar 21, 2015 at 4:19 PM, Rural Hunter <[hidden email]
>>>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> How to work out if I want to config the path of a third-party module
>>>>> if I
>>>>>>>> use js stack?
>>>>>>>>
>>>>>>>> 2015-03-20 17:07 GMT+08:00 Chris Poulsen <[hidden email]>:
>>>>>>>>
>>>>>>>>> In a javascript stack?
>>>>>>>>>
>>>>>>>>> On Fri, Mar 20, 2015 at 4:05 AM, Rural Hunter <
>> [hidden email]>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> I'm testing tapestry 5.4. I'm wondering where to put the
>>>>>>>> requirejs.config
>>>>>>>>>> code for my own modules and third-party modules?
>>>>>>>>>>
>>>>>>>>>>
>> ---------------------------------------------------------------------
>>>>>>>>>> To unsubscribe, e-mail: [hidden email]
>>>>>>>>>> For additional commands, e-mail: [hidden email]
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [hidden email]
>> For additional commands, e-mail: [hidden email]
>>
>>


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]