簡體   English   中英

ESM 從 index.js 無法正常工作的文件夾中導入所有文件

[英]ESM importing all files from folder with index.js not working

考慮這個非常簡單的項目: esm-test

Node.js v13上運行。

這個項目在他的package.json"type":"module" ,所以 Node.js 默認將所有文件.js視為 ECMAScript 模塊。 請參閱: ECMAScript 模塊 - 啟用.

它具有以下非常簡單的結構:

- package.json
- src/
  - stuff/
    - a.js
    - b.js
    - index.js
  - app.js

文件app.js是包入口點。

我的目的是使用index.js文件從stuff/文件夾導入所有文件。 我知道在 ES6 中,在文件夾中有一個index.js文件可以讓您隱式地從文件夾執行導入,而無需在 import 語句中指定index.js

所以我可以這樣做:

import { a, b } from './stuff'

代替:

import a from './stuff/a.js'
import b from './stuff/b.js'

但這對我不起作用。 它顯示以下錯誤:

internal/modules/esm/default_resolve.js:96
  let url = moduleWrapResolve(specifier, parentURL);
            ^

Error: Cannot find module C:\projects\esm-test\src\stuff imported from C:\projects\esm-test\src\app.js
    at Loader.resolve [as _resolve] (internal/modules/esm/default_resolve.js:96:13)
    at Loader.resolve (internal/modules/esm/loader.js:72:33)
    at Loader.getModuleJob (internal/modules/esm/loader.js:156:40)
    at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:42:40)
    at link (internal/modules/esm/module_job.js:41:36) {
  code: 'ERR_MODULE_NOT_FOUND'
}

使用 CommonJS 模塊工作。 但我想用 ESM 來做。

你能幫我解決這個問題嗎?

在 esm 中自動導入 index.js 是 node.js 當前版本中的一個實驗性功能。 您可以在啟動服務器時使用標志--experimental-specifier-resolution=node

EX- node --experimental-specifier-resolution=node index

請參閱此鏈接以獲取更多信息https://nodejs.org/api/esm.html#esm_resolver_algorithm

為了使“type”:“module”工作,您需要導入包括文件名和擴展名即“index.js”,默認情況下它不會查找index.js,其他文件也需要包含擴展名艾吉斯

a.js / b.js

class a {
  constructor(name) {
    this.name = name;
  }

  sayName() {
    console.log('Hi, my name is ', this.name + '.');
  }
}

export default a;

./stuff/index.js

import a from './a.js';
import b from './b.js';

export {
    a,
    b
};

//Or "export default" depending on your needs.

export default {
    a,
    b
};

應用程序.js

import { a, b } from './stuff/index.js'

如果您有多個命名導出,則需要像這樣導入。

import * as a from './a.js';

暫無
暫無

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

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