dependentree icon indicating copy to clipboard operation
dependentree copied to clipboard

Difficulty running example code locally

Open raffian opened this issue 2 years ago • 3 comments
trafficstars

This library is amazing. We've been looking for something in d3 for illustrating bidirectional upstream and downstream software dependencies. Your implementation is not only perfect but sleek and smooth - it's really beautiful, so kudos to your efforts,

Now the bad news. I spent several hours trying to get the example code working from the README. I'm no frontend expert, but I've built websites in the past (years ago) and definitely not a stranger to HTML and JS, even tinkered with NodeJS but nothing serious. I created index.html from this snippet in Quickstart, added a simple index.js to serve up static content, then ran with node index.js and immediately got NOT FOUND errors for dependentree.js and royal.js. Troubleshooted and hacked together a solution for loading script resources but it still doesn't load properly.

My suspicion is I'm running the code incorrectly. Should I be using webpack? If so, that's fine, I'll figure it out but I just want to make sure it's the right path.

raffian avatar Apr 05 '23 00:04 raffian

I took my own advice and switched to webpack.

Project structure

/dist
/src
   index.html
   index.js
webpack.config.js
package.json

webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin');
const path = require('path');

module.exports = {
  plugins: [
    new HtmlWebpackPlugin({
      hash: true,
      title: 'Webpack Example App',
      header: 'Webpack Example Title',
      metaDesc: 'Webpack Example Description',
      template: './src/index.html',
      filename: 'index.html',
      inject: 'body'
    })
  ],
  mode: 'development',
  output: {
    clean: true
  },
  devServer: {
    static: './dist',
    open: true
  },
  "entry":'./src/index.js'
};

package.json

{
  "name": "webpack2",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack serve --mode development",
    "prod": "webpack --mode production"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@square/dependentree": "^1.0.2",
    "html-webpack-plugin": "^5.5.0",
    "webpack": "^5.77.0",
    "webpack-cli": "^5.0.1",
    "webpack-dev-server": "^4.13.2"
  }
}

For src/index.html I used snippet from Form Example , as-is. The only thing I have in src/index.js is this:

import DependenTree from '@square/dependentree';

Build to /dist, run with npm run dev, no errors on startup, but browser having issues resolving resources. Out of curiosity I placed copied of dependentree.js and royals.js in the /dist folder which eliminated all the errors, but that was a hack and cannot be the correct solution, and the tree still failed to load so my hack sorcery was moot anyway. Any ideas on what I'm missing?

image

$ npm run dev

> [email protected] dev
> webpack serve --mode development

<i> [webpack-dev-server] Project is running at:
<i> [webpack-dev-server] Loopback: http://localhost:8080/
<i> [webpack-dev-server] On Your Network (IPv4): http://192.168.0.207:8080/
<i> [webpack-dev-server] Content not from webpack is served from './dist' directory
<i> [webpack-dev-middleware] wait until bundle finished: /
asset main.js 261 KiB [emitted] (name: main)
asset index.html 4.08 KiB [emitted]
orphan modules 629 KiB [orphan] 570 modules
runtime modules 27.3 KiB 12 modules
cacheable modules 173 KiB
  modules by path ./node_modules/webpack-dev-server/client/ 68.9 KiB 16 modules
  modules by path ./node_modules/webpack/hot/*.js 4.59 KiB
    ./node_modules/webpack/hot/dev-server.js 1.88 KiB [built] [code generated]
    ./node_modules/webpack/hot/log.js 1.34 KiB [built] [code generated]
    + 2 modules
  modules by path ./node_modules/html-entities/lib/*.js 81.3 KiB
    ./node_modules/html-entities/lib/index.js 7.74 KiB [built] [code generated]
    ./node_modules/html-entities/lib/named-references.js 72.7 KiB [built] [code generated]
    + 2 modules
  ./src/index.js 48 bytes [built] [code generated]
  ./node_modules/ansi-html-community/index.js 4.16 KiB [built] [code generated]
  ./node_modules/events/events.js 14.5 KiB [built] [code generated]
webpack 5.77.0 compiled successfully in 910 ms

raffian avatar Apr 05 '23 05:04 raffian

UPDATE

Yeah, it's finally working after my colleague and I spent a hour troubleshooting issues from my last post.

To fix 404 errors for dependentree.js and royals.js , we added royals.js to src/ folder, then updated src/index.js as follows:

import DependenTree from '@square/dependentree';
import royals from './royals.js';
window.DependenTree = DependenTree;
window.royals = royals;

Swapped content in index.html for the long snippet from Form Example, tried loading the page but got a few errors regarding symbols already defined so we commented out erroneous definitions for currentEntity and direction ...

    //let currentEntity = 'Elizabeth II';
    //let direction = 'downstream';
    t.setTree(currentEntity, direction);
  </script>
</html>

Next, updated <script> tags from this:

  <script type="text/javascript" src="dependentree.js"></script>
  <script type="text/javascript" src="royals.js"></script>

...to this:

  <script type="text/javascript" src="main.js"></script>
  <!-- script type="text/javascript" src="royals.js"></script -->
  <script>

Lastly, the browser kept saying clone() was undefined - couldn't figure out why so we removed it.

    // Adds data
    t.addEntities(clone(testData.royals));      //---> changed to tree.addEntities(royals);

We're not sure if this is the correct way of using dependentree but it's how we got it working.

raffian avatar Apr 05 '23 22:04 raffian

Hello, i tried the adjustments you made but in react, just getting a blank page

DevMukhtarr avatar Jan 11 '24 19:01 DevMukhtarr