weixsong / elasticlunr.js

Based on lunr.js, but more flexible and customized.
http://elasticlunr.com
MIT License
2.02k stars 147 forks source link

"lunr is not defined" when strict parsing is enabled #145

Open sagar-lcm opened 1 year ago

sagar-lcm commented 1 year ago

Hi! πŸ‘‹

Firstly, thanks for your work on this project! πŸ™‚ When the strict parsing option is enabled for typescript, we are getting the following error: "errorType": "ReferenceError", "errorMessage": "lunr is not defined", "trace": [ "ReferenceError: lunr is not defined", " at /var/task/xxx.js:45:12", " at ../../node_modules/elasticlunr/elasticlunr.js (/var/task/xxx.js:1184:7)", " at __require (/var/task/etl.js:9:51)", " at Object.<anonymous> (/var/task/etl.js:61807:34)", " at Module._compile (node:internal/modules/cjs/loader:1105:14)", " at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)", " at Module.load (node:internal/modules/cjs/loader:981:32)", " at Function.Module._load (node:internal/modules/cjs/loader:822:12)", " at Module.require (node:internal/modules/cjs/loader:1005:19)", " at require (node:internal/modules/cjs/helpers:102:18)" ] }

Here is the diff that solved my problem:

diff --git a/node_modules/elasticlunr/elasticlunr.js b/node_modules/elasticlunr/elasticlunr.js
index 37d9986..034f0ce 100644
--- a/node_modules/elasticlunr/elasticlunr.js
+++ b/node_modules/elasticlunr/elasticlunr.js
@@ -87,7 +87,7 @@ elasticlunr.version = "0.9.5";

 // only used this to make elasticlunr.js compatible with lunr-languages
 // this is a trick to define a global alias of elasticlunr
-lunr = elasticlunr;
+var lunr = elasticlunr;

 /*!
  * elasticlunr.utils
nekketsuuu commented 11 months ago

This error seems to be fixed at current master branch (at least be7fdaac67cdb3ea1e7bff3cf0bca577b02e8e84).

hakeem-plutoflume commented 4 weeks ago

We found a solution to this for our codebase. We migrated from Webpack to Vite v4.5.3 and because Vite doesn't use a bundle based web server, and serves dependencies directly to the browser as native ESM, we encountered this problem due to it running in strict mode.

For anyone that encounters this problem with Vite, this is the config that fixed it for us -

  /**
     *
     * In development mode, variables defined in `define` will be added as globals to the code.
     *
     * In production mode, variables defined would be replaced (find and replace) in the build output. Similar to a string find and replace.
     * It is used for example, replacing `process.env.NODE_ENV` with the actual value in the dependent bundles like react
     *
     */
    define:
      command === 'serve'
        ? {
            lunr: {},
          }
        : {
            // https://vitejs.dev/config/shared-options#define
            // elasticlunr fails in strict mode because lunr is declared as a global variable, without using 'var'
            // This is a workaround to make it work in strict mode during build. Does not work for dev
            'lunr = elasticlunr;': 'var lunr = elasticlunr;',
          },