簡體   English   中英

如何使用require而不是import加載JavaScript庫

[英]How to load javascript library with require instead of import

我正在創建一個node.js AWS Lambda無服務器應用程序,並嘗試包含simmerjs https://github.com/gmmorris/simmerjs

文檔中的示例使用了來自'simmerjs'的import Simmer,這當然會在ES5中引發語法錯誤。 我在本地開發環境中使用aws SAM cli。 sam invoke命令啟動運行Node.js v10.15.3。的Docker容器。

沒有--experimental-mode標志,此版本不支持ES6。 到目前為止,我還沒有找到啟用--experimental-mode來啟動容器的方法。

有什么方法可以使用ES5 require('simmerjs')語法加載Simmerjs? 我嘗試過,但是在嘗試創建新對象時返回“ TypeError:Simmer不是構造函數”錯誤。

這是一段代碼摘要,其中包含我嘗試過和失敗的結果。 我可以加載文件,但不能創建對象。

// top of index.js 

// all statements below cause SyntaxError: Unexpected token
//import Simmer from 'simmerjs';
//import Simmer from './simmerjs';
//import { Simmer } from './simmerjs';

// Statement works but causes "TypeError: Simmer is not a constructor" error
// later when trying to instantiate an object
const Simmer = require('simmerjs');

const jsdom = require("jsdom");
const AWS = require("aws-sdk");
const sql = require("mssql");
const S3 = new AWS.S3();
var steps = new Array();

exports.handler = (event, context, callback) => {
    .
    .
    .
    omitted for clarity
        elements = await convertElements(elArray, prevDom);
}

const convertElements = async (fromArray, dom) => {
  // {dom} contains a jsdom window object - tried with document object as well   

  // all code below returns "TypeError: Simmer is not a constructor" error
    const mysimmer = new Simmer(dom,'{specificityThreshold: 100}',false);
  //const mysimmer = new Simmer(dom);
  //const simmer = new Simmer(dom, null, false);
  //let simmer = new Simmer(dom);
  //var simmer = new Simmer(dom,null, null);

  //Does not return "constructor error" but it gets the same results as 
  // new Simmer() can not use the object
  //const simmer = Simmer;  

  . 
  . omitted for clarity
  .
 }

根據文檔:

By the book:
    import Simmer from 'simmerjs'
    const simmer = new Simmer()
    const el =  document.getElementById('#SomeElement')

Docs Node example:
    import Simmer from 'simmerjs'
    const virtualWindow = new JSDom()
    const simmer = new Simmer(virtualWindow)
    const reconfiguredSimmer = simmer.configure({ /* some custom configuration */ })

我應該能夠從Simmer庫中創建一個新的Simmer對象。 或者,如果我能找到一種在本地和部署時都啟用實驗模式的方法,那么我應該能夠使用ES6語法。

更新資料

為了使它與commonJS一起使用,我必須指定默認構造函數。

const Simmer = require('simmerjs').default;

當然。 你會做

...
var Simmer = require('local/path/to/dist/simmerjs');
var whatever = new Simmer(virtualWindow)
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM