nicolaspanel / numjs

Like NumPy, in JavaScript
MIT License
2.4k stars 183 forks source link

numjs not compatible with vitejs bundler #107

Open mojv opened 2 years ago

mojv commented 2 years ago

Would be great if you guys make numjs compatible with vitejs (which is insanely fast).

I just created a blank project and just try to add it in the main.js file like so:

// src/main.js
import { createApp, reactive } from 'vue'
import App from './App.vue'
import * as nj from 'numjs'

const app = createApp(App);
app.config.globalProperties.$nj = nj; 

app.mount('#app');

browser shows this error:

image

image

thanks a lot

grimmer0125 commented 2 years ago

@mojv,

I made a forked @d4c/numjs package, and there are three output formats inside. I tried to use this with Vite react app and got the same error when using import nj from '@d4c/numjs'. However, this one import nj from "@d4c/numjs/build/module/numjs.min.js works. Please try it.

numjs.min.js is originally built for CDN for the below usages:

import nj from 'https://cdn.jsdelivr.net/npm/@d4c/numjs/build/module/numjs.min.js'; // or 
  <script type="module">
    import nj from 'https://cdn.jsdelivr.net/npm/@d4c/numjs/build/module/numjs.min.js';
  <script>

It is a work-around way. I may improve it later since using import nj from '@d4c/numjs' is always shorter and better.

mojv commented 2 years ago

i tried and worked, is a shame though cause this will load the hole library in the broewser, whereas with importing specific modules, when building, it will only bundle the code that is being used. anyways, not much of a big deal, numjs is not that heavy

grimmer0125 commented 2 years ago

i tried and worked, is a shame though cause this will load the hole library in the broewser, whereas with importing specific modules, when building, it will only bundle the code that is being used. anyways, not much of a big deal, numjs is not that heavy

The issue is some ndarray related packages uses by numjs are not designed for tree-shakable and use some Node.js library/CommonJS inside. So it needs at least some bundler/transpiler to do some things. It takes some time to config/refacor them (polyfill or mock), either on numjs package side or the bundler/transpiler side of the numjs user.