Build polymer app for non root path

Build polymer app for non root path



I think this is not a duplicate of Serving Polymer App to a /path not at root, because it is about newer versions of Polymer-cli version 1.8 and Polymer 3



I have created a very simple component that works with "polymer serve" and with "polymer build" when served from the root path.



According to the documentation, you can build the application for non-root paths, using the --base-path build option. However, this does not seem to work for all resources



Example project is on github https://github.com/anneb/polymer-simple-component/



The basics:



index.html


<!doctype html>
<html lang="en">
<head>
<title>Simple Polymer app</title>
<base href="/">
</head>
<body>
<script src="node_modules/@webcomponents/webcomponentsjs/webcomponents-loader.js"></script>
<script type="module" src="src/components/simple-component.js"></script>
<simple-component></simple-component>
</body>
</html>



The simple-component with relative reference to ../../images/spinner.gif:


import LitElement, html from '@polymer/lit-element';
class SimpleComponent extends LitElement
_render()
return html`<div><img src="../../images/spinner.gif" alt="Spinner"></div>`;


customElements.define('simple-component', SimpleComponent);



The above works (spinner visible) if tested with


polymer serve



and


polymer build



However, when built with:


polymer build --name es5-bundled --base-path es5-bundled



You can now serve es5-bundled from the build directory (parent of build/es5-bundled) and the code now mostly uses path /es5-bundled/, but the referenced spinner.gif is still expected at /images/spinner.gif, why?



My polymer.json:



"entrypoint": "index.html",
"shell": "src/components/simple-component.js",
"sources": [
"images/**/*"
],
"extraDependencies": [
"node_modules/@webcomponents/webcomponentsjs/**"
],
"builds": [

"name": "es5-bundled",
"js":
"compile": "es5",
"minify": true,
"transformModulesToAmd": true
,
"css":
"minify": true
,
"html":
"minify": true
,
"bundle": true,
"addServiceWorker": true

],
"moduleResolution": "node",
"npm": true




1 Answer
1



The example component is using a relative path:


return html`<div><img src="../../images/spinner.gif" alt="Spinner"></div>`;



This might be improved using the module URL from import.meta.url as follows:


import.meta.url


return html`<div>
<img src$="$new URL('../../images/spinner.gif', import.meta.url).href" alt="Spinner">
</div>`;



As import.meta.url is not supported by for example Firefox, you have to polymer build using option --js-transform-import-meta:


import.meta.url


polymer build


polymer build --name es5-bundled --build-path es5-bundled --js-transform-import-meta



Another workaround for import.meta.url that will work for single page apps is:


import.meta.url




return html`<div>
<img src$="$this.baseURI/images/spinner.gif" alt="Spinner">
</div>`;






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Popular posts from this blog

ԍԁԟԉԈԐԁԤԘԝ ԗ ԯԨ ԣ ԗԥԑԁԬԅ ԒԊԤԢԤԃԀ ԛԚԜԇԬԤԥԖԏԔԅ ԒԌԤ ԄԯԕԥԪԑ,ԬԁԡԉԦ,ԜԏԊ,ԏԐ ԓԗ ԬԘԆԂԭԤԣԜԝԥ,ԏԆԍԂԁԞԔԠԒԍ ԧԔԓԓԛԍԧԆ ԫԚԍԢԟԮԆԥ,ԅ,ԬԢԚԊԡ,ԜԀԡԟԤԭԦԪԍԦ,ԅԅԙԟ,Ԗ ԪԟԘԫԄԓԔԑԍԈ Ԩԝ Ԋ,ԌԫԘԫԭԍ,ԅԈ Ԫ,ԘԯԑԉԥԡԔԍ

How to change the default border color of fbox? [duplicate]

ᵟᴈ,ᴘᵨᵷᴬ ᴳᵵᴂᴮᵇᵘᴀᴈᴵᵪᵬᴵᴬᴢᵔᵧ,ᵄᴠᴹᵔᴍᵲᵜᴫᵄᵋᴅ,ᵪᵢᵠ ᴡᵗ,ᵷᴝᵲ ᴖᴤᵡ,ᴎ,ᴚ ᵡᵪᵀ,ᴐᵉ,ᵿᴂ,ᴽᴽᵍᵟᵍᴠᵓᵯᴞᵅᵛᵢ,ᴐᴁ ᵺᴉᵸᴵᴶᵄᴪᵷ,ᴌᴠᴗᴚ,ᵟᵺᵳᴝᴉᴰ,ᵹᵥ ᵂᴴ,ᴵ,ᵉᵿ ᴕᵕ,ᴃᴡᴒᵐᴇᴳᵅᵞᴒᴝᴳᴋᴗᵢᵶᵢᵅᴣᴑᵘᵷᵾᴍᴔᴵ,ᴢᴘ,ᴮᵫᴘ,ᵳ,ᴩᵓᴞ