How to set baseUrl in Polymer Starter Kit?

谁都会走 提交于 2019-12-05 02:18:56

问题


How to set baseUrl in Polymer Starter Kit(light version)?

(similar: Serving Polymer App to a /path not at root)

I want to run it in subfolder (dl and unzipped PSK there, server is xampp):

http://localhost/test/psk/app/

When I go to that URL, app is redirecting to:

http://localhost/

with this note:

Can't find: http://localhost/test/psk/app/#!/test/psk/app/. Redirected you to Home Page Ok

There are no console errors, app work fine except the URL problem.

Here are app.js:

// Sets app default base URL
  app.baseUrl = '/';

  if (window.location.port === '') {  // if production
    // Uncomment app.baseURL below and
    // set app.baseURL to '/your-pathname/' if running from folder in production
    // app.baseUrl = '/polymer-starter-kit/';


   // If this is baseURL:
   //app.baseUrl = 'http://localhost/test/psk/app/';
   //Then click on the menu -  reloads the page with 404 URL:
   //http://localhost/test/psk/app/users
  }
  ...

and routing.html

<script src="../bower_components/page/page.js"></script>
<script>
  window.addEventListener('WebComponentsReady', function() {

      console.log('routing.html');

    // We use Page.js for routing. This is a Micro
    // client-side router inspired by the Express router
    // More info: https://visionmedia.github.io/page.js/

    // Removes end / from app.baseUrl which page.base requires for production
    if (window.location.port === '') {  // if production
      page.base(app.baseUrl.replace(/\/$/, ''));
       console.log("app.baseUrl");
       console.log(app.baseUrl);
    }

    // Middleware
    function scrollToTop(ctx, next) {
      app.scrollPageToTop();
      next();
    }

    function closeDrawer(ctx, next) {
      app.closeDrawer();
      next();
    }

    function setFocus(selected){
      document.querySelector('section[data-route="' + selected + '"] .page-title').focus();
    }

    // Routes
    page('*', scrollToTop, closeDrawer, function(ctx, next) {
      next();
    });

    page('/', function() {
      app.route = 'home';
      setFocus(app.route);
    });

    page(app.baseUrl, function() {
      app.route = 'home';
      setFocus(app.route);
    });

    page('/users', function() {
      app.route = 'users';
      setFocus(app.route);
    });

    page('/users/:name', function(data) {
      app.route = 'user-info';
      app.params = data.params;
      setFocus(app.route);
    });

    page('/contact', function() {
      app.route = 'contact';
      setFocus(app.route);
    });

    // 404
    page('*', function() {
      app.$.toast.text = 'Can\'t find: ' + window.location.href  + '. Redirected you to Home Page';
      app.$.toast.show();
      page.redirect(app.baseUrl);
    });

    // add #! before urls
    page({
      hashbang: true
    });

  });
</script>

回答1:


By no means I pretend to give definitive answer here.

I do not think running from sub-folder is currently working. I have tried several hacks (various combinations of setting app.baseUrl, hacking routes, using page.base() ) none have bear fruit and I gave in for the time being.

Polymer site https://elements.polymer-project.org/elements/app-route claims (at time of writing):

app-route 0.9.1

app-route is an element that enables declarative, self-describing routing for a web app.

n.b. app-route is still in beta. We expect it will need some changes. We're counting on your feedback!

so, what I have experienced so far (and wish to share) is: either you'll run your app directly from the file, from the root of web server or from root on non standard http port (to debug your app you can use python http module or some other small server meant for static files that would work in fashion http://localhost:port) Deployment would require the same constrains.

suggested run method: https://www.polymer-project.org/1.0/start/toolbox/set-up#serve-your-project

What I did not try is using .htaccess to rewrite URL base (that could work in theory, but it would be really slow, as app route calculation/reaction for this kind of app shall not happen at server side, but on client side, and would be only applicable to apache like servers, and most unwanted, you'll loose client context)

To be honest, I would rather, on this issue, be proven wrong. ;)




回答2:


Set the app.baseUrl when not using a port number (i.e. in Production)

In app.js:

// Sets app default base URL
app.baseUrl = '/';
if (window.location.port === '') { // if production
    // Uncomment app.baseURL below and
    // set app.baseURL to '/your-pathname/' if running from folder in production
    app.baseUrl = '/base-url/you/want/to/use/';  // <- Set this here
}


来源:https://stackoverflow.com/questions/37298557/how-to-set-baseurl-in-polymer-starter-kit

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!