I am working on a big Dart project that includes a web frontend as well as a couple of custom libs. We are using the recommended folder structure as described here.
my_app/
lib/
my_library1/
example/
lib/
my_library1.dart
my_library1.html
pubspec.yaml
...
web/
pubspec.yaml
And we have several libraries in our lib folder that we all import in our main pubspec.yaml like this:
dependencies:
my_library1:
path: lib/my_library1
This is all working just fine, but when I use pub build to generate a JS build, I get a ton of Linter warnings about how to import packages correctly for each lib we have.
For example, the my_library1 lib has a polymer import in the my_library1.html file that looks like this:
<link rel="import" href="../../packages/polymer/polymer.html">
The warning for this would be:
[Warning from polymer (Linter) on my_app|lib/my_library1/lib/my_library1.html]:
line 1, column 1 of lib\my_library1\lib\my_library1.html: Invalid URL to reach to another package: ../../packages/polymer/polymer.html. Path reaching to other packages must first reach up all the way to the packages directory. For example, try changing the URL to: ../../../../packages/polymer/polymer.html. See http://goo.gl/5HPeuP#code_transformers_2 for details.
<link rel="import" href="../../packages/polymer/polymer.html">
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Now, if I change that line to what they suggest (../../../../packages/polymer/polymer.html), I get this error instead:
[Warning from polymer (Linter) on my_library1|lib/my_library1.html]:
line 1, column 1 of lib\my_library1.html: Invalid URL to reach to another package: ../../../../packages/polymer/polymer.html. Path reaching to other packages must first reach up all the way to the packages directory. For example, try changing the URL to: ../../packages/polymer/polymer.html. See http://goo.gl/5HPeuP#code_transformers_2 for details.
<link rel="import" href="../../../../packages/polymer/polymer.html">
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
So no matter how I do it, it's wrong. Interestingly, the source file for the warning changes from my_library1|lib\my_library1.html to my_app|lib\my_library1\lib\my_library1.html.
Does this make sense to anyone?
btw, I have been reading up on this stuff on various Dart sites (#1, #2, #3), but to no avail.
I am using Dart 1.7.2 (STABLE) and polymer 0.15.3+2
Your package should not contain more than one pubspec.yaml file. The lib/ folder should have only dart files and other assets, such as html, js and css files. For example, you can organize your project as follow:
my_app/
lib/
my_library1/
my_library1.dart
my_library1.html
...
web/
pubspec.yaml //you do not need to include my_library1 as a dependency here
Furthermore, if you want to use my_library1 in others packages, you need to move it to its own package:
my_library1/
example/
lib/
my_library1.dart
my_library1.html
pubspec.yaml
my_app/
lib/
...
web/
pubspec.yaml //you need to include my_library1 as a dependency here
In either case, my_library1.html can use the following import:
<link rel="import" href="../../packages/polymer/polymer.html">
Related
Installed JetBrains WebStorm 2018.1 EAP
Installed Dart using a third-party installer by link from official site
Created a new project, with default settings. Dart version 2.0.0-dev.20.0. Check Generate sample content checkbox and select Dart Web App. Create.
Press Run.
Get message:
No pubspec.lock file found, please run "pub get" first.
Press 'get dependences'. In the window below, I get the message:
Working dir: C:\Users\Anton\Source\Front\untitled "C:\Program
Files\Dart\dart-sdk\bin\pub.bat" get Resolving dependencies...
Overriding the upper bound Dart SDK constraint to <=2.0.0-dev.20.0 for
the following packages:
browser
To disable this you can set the PUB_ALLOW_PRERELEASE_SDK system
environment variable to false, or you can silence this message by
setting it to quiet.
+ browser 0.10.0+2 Downloading browser 0.10.0+2... Process finished with exit code -1 073 741 795
I try to execute pub get through the terminal - and get the same message
I add environment variable PUB_ALLOW_PRERELEASE_SDK, like this: set PUB_ALLOW_PRERELEASE_SDK=false, but but after nothing has changed
I try download manually, but I can not find a description of where these files should be located, relative to the project
I'm new to the frontend and especially to dart so most likely I miss some small detail
pubspec.yaml
name: untitled
version: 0.0.1
description: A sample web application
dependencies:
browser: any
dev_dependencies:
# unittest: any
untitled.html
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="untitled.css">
</head>
<body>
<div id="sample_container_id">
<p id="sample_text_id">Click me!</p>
</div>
<script type="application/dart" src="untitled.dart"></script>
<script src="packages/browser/dart.js"></script>
</body>
</html>
As Gunter said, the warning about PUB_ALLOW_PRERELEASE_SDK is to be expected while using a pre-release Dart SDK.
Prior to upgrading to Dart 1.12.x version the following .html file links resolved correctly.
.html
<!DOCTYPE html>
<link href='../../../../packages/core_elements/core_icon.html' rel='import'>
<link href='../../../../packages/html_components/utility/safe_html.html' rel='import'>
<polymer-element name='required-tooltip'>
<template>
<div layout horizontal flex id='<tipp></tipp>'>
<core-icon id='tip-icon' icon=''></core-icon>
<h-safe-html id='label' content='<bol><u>Required</u><bold>'></h-safe-html>
</div>
</template>
<script type='application/dart' src='required_tooltip.dart'></script>
</polymer-element>
Lines 2 and 3 imports did resolve correctly.
After upgrading to the new .packages file instead of the /package symlinks, none of the links are resolved.
What are the new rules to correct these issues?
Thanks
WebStorm 11 EAP uses the --no-package-symlinks when you run pub get or pub upgrade. This feature is still experimental. A simple workaround is to run pub get or pub upgrade from command line and you get the packages directory with the symlinks back.
When resolution using the .packages file is supported everywhere, there shouldn't be any change necessary in your code even when the packages directory doesn't exist anymore.
See also https://github.com/dart-lang/sdk/issues/24237
I written a website using dart and polymer, it runs well in Chromium, but cannot get it compiled to js.
The directory layout is like:
my_proj/
pubspec.yaml (Contents below)
lib/
some_code.dart ... (Used by index.dart, app.dart and custom_elem_x.dart)
asset/
3rd-party codes ... (CSS, JS lib, etc.)
web/
index.html (Traditional HTML, no polymer stuff)
app.html (Use lots of custom elements written in polymer)
script/
index.dart (Pure dart, nothing fancy, has a main())
app.dart (Has a main(), in which initPolymer() get called)
polymer/
custom_elem_1.html (Imported by app.html via \
custom_elem_1.dart <link rel="import" href="polymer/custom_elem_1.html">)
...
custom_elem_n.html
custom_elem_n.dart
pubspec.yaml:
name: blah
dependencies:
browser: any
polymer: any
...
transformers:
- polymer:
entry_points: web/app.html
- $dart2js:
minify: true
If I run pub build under my_proj/, there is no error as far as I can tell, (lots of warnings, though). But the index.html is static (just contents, no actions), and the custom element in app.html is not rendering. Any idea what caused this?
I am using dart-sdk 1.2.1 (pub --version) on Debian 7 32bit.
Thanks.
Edit
Managed to fix it by deleting all packages/ in project dir, and running pub get again. custom_element, shadow_dom, html5lib get updated to 0.9.2, seems these updates got it fixed, because I put get several times before, and nothing worked.
The generated sample content for a web_ui applications adds xclickcounter.dart AND xclickcounter.html in the web folder. This is an Application Package.
How may I add these to the lib folder to be used as a package that other pacages will depend on? Is it possible?
(TL;DR - just drag the xclickcounter files into a lib folder, and use that package in another package)
Yes, this is possible. You would structure your projects like this:
xclickcounter/
pubpec.yaml
build.dart
lib/
xclickcounter.html
xclickcounter.css
xclickcounter.dart
web/
test.html -- if you wanted to test it in this project
...elsewhere...
myAppProject/
pubspec.yaml
build.dart
web/
myapp.html
myapp.dart
myapp's pubspec.yaml would contain
dependencies:
xclickcounter:
path: ..\..[relative_or_absolute]..\xclickcounter
[or deploy xclickcounter to git]
myapp.html would contain something like:
<head>
<link rel="components" href="package:xclickcounter/xclickcounter.html">
</head>
<body>
<x-click-counter></x-click-counter>
...
</body>
Trying to upgrade to 0.6.3, but Pub Manager updates nothing. If you checked the packages directory, you'll find it remains at 0.6.2+2
Sicne 0.6.3, we rename it to Rikulo UI and the package is renamed to rikulo_ui. Thus, you have to change the dependencies in your pubspec.yaml:
dependencies:
rikulo_ui: any
Furthermore, you have to change the import statement to rikulo_ui, such as:
import 'package:rikulo_ui/view.dart';
In the HTML file, you have to link the CSS file from rikulo_ui too:
<link rel="stylesheet" type="text/css"
href="packages/rikulo_ui/resource/css/default/view.css" />
If you cloned Rikulo UI's git repository, you have to switch it to the new location:
git config remote.origin.url git://github.com/rikulo/ui.git