es6-modules 相关问题

用于JavaScript的标准模块系统,在ECMAScript 6(2015)中引入。

ESM 相当于 createRequire(path).resolve(module)

我正在开发一个 JavaScript 检测引擎,在其中我遍历源文件的 AST 并递归地将导入的模块排队以进行检测。为此,我需要解析一个模块...

回答 1 投票 0

Javascript - 如何在 Node.js 中使用导入的模块

这是我的package.json: “名称”:“api_geoservices”, “版本”:“1.0.0”, “类型”:“模块”, “脚本”:{ “开始”:“...

回答 1 投票 0

Vitest 无法使用 require() 导入到 CommonJS 模块中

我正在运行 vitest runner。然后我看到有人可能正在从我的 .ts 文件生成一些 .js 文件: 我收到的错误消息似乎源自 uiElementsCreator.test....

回答 1 投票 0

将ESM库导入commonjs项目错误[ERR_REQUIRE_ESM]:ES模块的require() -

问题 我有一个“commonjs”打字稿项目,我需要添加几个作为 ESM 包的 npm 依赖项。 我目前无法将我的项目从 type: 'commonjs' 移动到 type: 'module ,我是

回答 1 投票 0

为什么 ES6 导入在纯 js 文件中不起作用

我在从库导入纯 JavaScript 文件时遇到问题 例如,目前我正在尝试学习 Redux,我发现我应该学习 redux 工具包。但是当我尝试导入时

回答 1 投票 0

Langchain 未部署到 Firebase 功能

我正在尝试使用 langchain 将此函数部署到 firebase 函数,但在部署它时我不断收到此错误。 node_modules/@langchain/openai/node_modules/@langchain/core/dist/language_m...

回答 1 投票 0

相当于ES模块中的require('./foo')(something)?

我目前有这个代码: const bar = require('./foo')(某事) 如果 ./foo 是一个正在导入的 ES 模块,你会如何重写它?

回答 1 投票 0

开玩笑:语法错误:无法在模块外部使用 import 语句

我正在 Node/TS 项目中编写测试,这是一个后端 API(没有 babel,没有 webpack,没有 React/Angular/vue/...)。 那么我的项目是一个 CommonJS 项目。 我使用 Jest 作为测试框架。 一切...

回答 1 投票 0

白痴开发者无法使用esm模块在nodejs中动态导入文件

我正在尝试将我的 commonjs 存储库转换为 ESM,但在使用 readFileSync 命令时遇到问题。看来我在节点 18 和节点 20 上得到了不同的行为。我尝试加载路径: D:\dev s-

回答 1 投票 0

在 Nodejs 上使用 readFileSync 和 esm 模块时遇到问题

我正在尝试将我的 commonjs 存储库转换为 ESM,但在使用 readFileSync 命令时遇到问题。看来我在节点 18 和节点 20 上得到了不同的行为。我尝试加载路径: D:\dev s-

回答 1 投票 0

尝试导入函数时找不到从“...”导入的模块“...”

我尝试为我正在创建的 Angular 应用程序设置 Node.js 后端。 我设置了服务器,现在尝试从不同的类调用一个函数,该函数将调用第三方 API。 我的文件

回答 1 投票 0

如何在 Javascript 中检查脚本是否作为 ES6 模块运行(以便可以“导出”)?

我想制作一个Javascript文件 如果可以导出(例如,它已加载 ),则导出其内容(例如,类) 否则,分配其内容...</desc> <question vote="11"> <p>我想制作一个 Javascript 文件</p> <ul> <li><pre><code>export</code></pre>是它的内容(例如一个类),如果它可以<pre><code>export</code></pre>(例如它已经加载了<pre><code>&lt;script type=&#34;module&#34;&gt;</code></pre>)</li> <li>否则,将其内容分配给全局变量,例如 <pre><code>window</code></pre> 和 <pre><code>global</code></pre>。</li> </ul> <hr/> <p>例如,假设有这样一个文件<pre><code>print.js</code></pre>。</p> <h3>案例A</h3> <p>可以像这样使用它:</p> <pre><code>&lt;script type=&#34;module&#34;&gt; import print_things from &#34;./print.js&#34;; print_things(&#34;Javascript innovation&#34;); &lt;/script&gt; </code></pre> <h3>案例B</h3> <p>或者,</p> <pre><code>&lt;script src=&#34;./print.js&#34;&gt;&lt;/script&gt; &lt;script&gt; print_things(&#34;Hmmmmmmm.&#34;); &lt;/script&gt; </code></pre> <hr/> <p>目前,使用 <pre><code>export</code></pre> 会使脚本在 <strong>Case B</strong>:<pre><code>Uncaught SyntaxError: Unexpected token export</code></pre> 中抛出错误。因此,它必须知道 <pre><code>export</code></pre> 在其运行的环境中是否可用,以便支持这两个用例。我该怎么做?</p> </question> <answer tick="false" vote="4"> <p>(<strong>注意:您可能不应该在现实世界中使用它</strong>,但它<em>是</em>完全有效并且完全符合您的要求。)<br/> 这是您的 <pre><code>print.js</code></pre> 的实现:</p> <pre><code>function print_things(msg) { console.log(msg) } if(0)typeof await/2//2; export default print_things </code></pre> <p></p><div data-babel="false" data-lang="js" data-hide="true" data-console="true"> <div> <pre><code>&lt;script type=module&gt; // (renamed to avoid name collision) import print_things2 from &#34;https://12Me21.github.io/external/print.js&#34; print_things2(&#34;Javascript innovation&#34;) &lt;/script&gt; &lt;script src=&#34;https://12Me21.github.io/external/print.js&#34;&gt;&lt;/script&gt; &lt;script&gt; print_things(&#34;Hmmmmmmm.&#34;) &lt;/script&gt;</code></pre> </div> </div> 此语法将从非模块脚本中“隐藏”导出语句,因为 <strong><pre><code>await/2//2; ...</code></pre></strong> 根据上下文进行不同的解析:<p></p> <ul> <li>在<em>模块</em>或<em>异步函数</em>中:<br/> <pre><code>await</code></pre>(运算符) <pre><code>/2/</code></pre>(正则表达式) <pre><code>/</code></pre>(除法) <pre><code>2</code></pre>(数字)</li> <li>在正常的<em>脚本中</em>:<br/> <pre><code>await</code></pre>(变量) <pre><code>/</code></pre>(除法) <pre><code>2</code></pre>(数字) <pre><code>//2 ... </code></pre>(<strong>评论</strong>)</li> </ul> <p>当它被解析为注释时,该行的其余部分将被忽略。因此,<pre><code>export</code></pre>语句仅对模块脚本可见。</p> <p>以下是规范的相关部分: <a href="https://tc39.es/ecma262/multipage/ecmascript-language-functions-and-classes.html#prod-AwaitExpression" rel="nofollow noreferrer">15.8 异步函数定义 > 语法 > AwaitExpression > 注意 1</a></p> <h3>兼容性</h3> <p>作为非模块脚本,它应该可以在<em>任何</em>浏览器(甚至是旧版本的 Internet Explorer 等)中工作,并且在启用<pre><code>&#34;use strict&#34;</code></pre>时仍然有效</p> <p>但是,将其作为模块加载需要支持“顶级等待”,这是在模块本身几年后添加的(〜2021年与〜2018年),所以请记住这一点。<br/> (它也适用于 Nodejs,无论哪种模式)</p> <p>我在自己编写的库中使用了这个技巧,并且它在多个环境中运行良好几个月。 然而,它给外部工具(框架、编译器、压缩器等)带来了一些问题</p> </answer> <answer tick="false" vote="2"> <p>理解 <pre><code>type=module</code></pre> 的浏览器应该忽略带有 <pre><code>nomodule</code></pre> 属性的脚本。这意味着您可以为支持模块的浏览器提供模块树,同时为其他浏览器提供回退。</p> <pre><code>&lt;script type=&#34;module&#34; src=&#34;module.js&#34;&gt;&lt;/script&gt; &lt;script nomodule src=&#34;fallback.js&#34;&gt;&lt;/script&gt; </code></pre> </answer> <answer tick="false" vote="1"> <p>查看<a href="https://github.com/umdjs/umd" rel="nofollow noreferrer">UMD</a>(通用模块定义)。即,<a href="https://github.com/umdjs/umd/blob/master/templates/commonjsStrictGlobal.js" rel="nofollow noreferrer">这个例子</a></p> <pre><code>(function (root, factory) { if (typeof define === &#39;function&#39; &amp;&amp; define.amd) { // AMD. Register as an anonymous module. define([&#39;exports&#39;, &#39;b&#39;], function (exports, b) { factory((root.commonJsStrictGlobal = exports), b); }); } else if (typeof exports === &#39;object&#39; &amp;&amp; typeof exports.nodeName !== &#39;string&#39;) { // CommonJS factory(exports, require(&#39;b&#39;)); } else { // Browser globals factory((root.commonJsStrictGlobal = {}), root.b); } }(typeof self !== &#39;undefined&#39; ? self : this, function (exports, b) { // Use b in some fashion. // attach properties to the exports object to define // the exported module properties. exports.action = function () {}; })); </code></pre> </answer> <answer tick="false" vote="0"> <p>就像其他答案的一个小附录。脚本的模块模式可以通过以下方式轻松识别:</p> <pre><code>const isModule = (document.currentScript == null); </code></pre> <p>至少在脚本的主要部分中执行,即不在事件处理程序或回调中执行。请参阅 MDN 上的<a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/currentScript" rel="nofollow noreferrer">此处</a> 然而,这个答案并没有解决OP的条件导出的实际意图,因为使用上面的布尔值然后有条件地导出变量会抛出“语法错误:导出声明可能只出现在模块的顶层”或类似的错误。因此,其他答案是要走的路。可能仍然存在上述识别有用的用例。</p> </answer> </body></html>

回答 0 投票 0

Node 和 esm - "type":"module" 破坏了我的脚本

我编写了一个打字稿函数来在 postgres 中插入一些行,我用 tsx 和一个包脚本开始它,如下所示......“install”:“env-cmd tsx Installation.ts”.. ..

回答 1 投票 0

模块导入导出问题

我正在尝试导出一个模块,在另一个模块中扩展和导出它,然后将其导入回原始模块中以便使用它,如下所示: // 基类.js 导出类基类{} 重要...

回答 1 投票 0

为什么Vite开发模式可以解析模块但不能解析构建的产品?

我正在使用 Vite 开发 Fastify 应用程序。 我的产品使用 jsonwebtoken 包来签名和验证 JWT。 在开发时,我可以通过Vite的开发模式使用所有jsonwebtoken功能。嗬...

回答 1 投票 0

将笑话与 Typescript、ESM 和别名一起使用

我使用 Typescipt 和 ESM 开发了一个模块(package.json 中的“type”:“module”)。 我还使用了一些路径别名,这是 tsconfig.json { “编译器选项”:{ ...

回答 2 投票 0

jest.spyOn 似乎没有正确模拟默认导出函数

我似乎无法弄清楚为什么这个测试失败了;我已将问题减少到这两个文件.. [文件:esm-user.js] const getJack = () => {return 'Jack';}; const getJill = () => {return 'Jill';};...

回答 1 投票 0

检测ES模块是否在Node中通过命令行运行

在 Node 中使用 CommonJS 模块时,您可以使用 require.main === 模块来检测脚本是否正在从命令行运行。 检测脚本是否正在运行的等效方法是什么...

回答 6 投票 0

在 Javascript 模块中从浏览器和 NodeJS 中使用微妙

NodeJS 有浏览器 crypto.subtle 的实验性实现。 我编写了一个可以在浏览器和 NodeJS 中运行的 Javascript 模块。它需要接触微妙的东西。 目前,

回答 1 投票 0

如何在 Remix 中使用图形组件库(例如 Material UI、Prime React)?

我正在使用Remix作为框架创建新项目,我想集成Material UI和Prime React等图形组件库。合并这些的建议步骤是什么

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.