Reputation: 3760
I am trying to follow these instructions for using web components. I installed the polymer paper-button with npm install --save @polymer/paper-button
, addded the below to my index.html and opened it with vscode's live-server. But I get a console error saying: Uncaught TypeError: Failed to resolve module specifier "@polymer/iron-flex-layout/iron-flex-layout.js". Relative references must start with either "/", "./", or "../".
. I would like to solve this without using a module bundler like webpack.
<script type="module" src="node_modules/@polymer/paper-button/paper-button.js"></script>
...
<paper-button raised class="indigo">raised</paper-button>
Upvotes: 3
Views: 1587
Reputation: 3142
The error you're getting refers to the inability of browsers - even those that support ES modules - to resolve bare module imports (import foo from 'bar';
).
Yes, here:
↓
<script type="module" src="node_modules/@polymer/paper-button/paper-button.js"></script>
you're importing by relative path but paper-button
in turn is importing other modules by bare specifier:
paper-button.js:11:1
import '@polymer/iron-flex-layout/iron-flex-layout.js';
To know more about modules in the browser and the reasons behind the lack of support for bare specifiers I would recommend this article by Damien Seguin.
You don't necessarily need a module bundler to be able to launch the application: polymer serve
, Polymer's dev server, resolves module specifiers automatically. Also, Polymer CLI's build
command may be of help if you don't want to manually configure a build system or alternatively tools like Babel can help you transform imports without bundling.
Upvotes: 4
Reputation: 3760
A workaround I have found is to instead use https://unpkg.com/ as per below:
<script type="module" src="https://unpkg.com/@material/mwc-button@latest/mwc-button.js?module"></script>
Note: you need to add the ?module
parameter to the end of the URL in order for unpkg to fix the bare module syntax within the file requested otherwise it just returns the original file with bare module imports.
Upvotes: 5