【问题标题】:esm does not resolve module-aliasesm 不解析模块别名
【发布时间】:2018-11-08 02:02:26
【问题描述】:

所以我使用包esmmodule-alias,但似乎 esm 没有注册模块别名的路径。

这是我加载服务器文件的方式:

nodemon -r esm ./src/index.js 8081

这是我的index.js 文件的顶部:

import "module-alias/register"
import "@/setup"

import "@/setup" 不起作用,而 require("@/setup") 起作用。

【问题讨论】:

    标签: javascript node.js npm


    【解决方案1】:

    问题是esm 在解析文件时尝试处理所有import 语句,然后再加载任何其他模块。

    在处理import语句时,它使用节点的内置require,而不是module-alias创建的修改后的require

    要解决此问题,您需要先加载module-alias,然后再加载esm。这样,module-alias 将有机会在 esm 执行任何操作之前修改 require 函数。

    您可以通过将多个 -r 参数传递给节点来实现此目的,但请确保 module-alias 位于第一位:

    node -r module-alias/register -r esm index.js 8081
    

    nodemon:

    nodemon -r module-alias/register -r esm ./src/index.js 8081
    

    您还需要从代码中删除import "module-alias/register",因为现在它是从命令行加载的。

    【讨论】:

    • 我需要加node_modules,像这样nodemon -r node_modules/module-alias/register
    • 我颠倒了顺序,现在似乎可以工作了,我的是这样的:node -r esm -r module-alias/register index.js,正常要求不起作用
    • 确认,我的工作顺序:-r esm -r module-alias/register index.js
    • 对我工作的我在 package.json 中添加了 "@std/esm": "cjs" nodemon -r @std/esm -r module-alias/register ./app/server.mjs跨度>
    • 如果我想手动添加别名怎么办,比如:import * as path from 'path'; import * as moduleAlias from 'module-alias'; moduleAlias.addAlias('@', path.join(process.cwd(), 'dist', 'server')); ?
    【解决方案2】:

    对我来说,使用以下代码:

    package.json

      "scripts": {
        "dev": "pkill -f lib/serverIndex.js; NODE_ENV=development node lib/serverIndex.js",
    

    lib/serverIndex.js

    require = require('esm')(module/*, options*/);
    require('module-alias/register');
    module.exports = require("./server.js");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-13
      • 2019-10-11
      • 2021-11-24
      • 2019-09-30
      • 2022-07-19
      • 2018-09-21
      • 2021-11-17
      • 2022-01-04
      相关资源
      最近更新 更多