【问题标题】:Problem importing a module from an express app in a script outside of express在 express 之外的脚本中从 express 应用程序导入模块时出现问题
【发布时间】:2021-06-23 16:40:51
【问题描述】:

我有一个 vanilla Express 应用,它的 package.json 看起来像这样:

{
  "name": "express-app",
  "version": "1.0.0",
  "main": "app.js",
  "dependencies": {
    ...
  },
  "devDependencies": {
    ...
  },
  "scripts": {
    ...
  },
}

我想在 express 应用程序之外编写一个脚本,从 express 应用程序中导入一个模块。该模块位于./src/model/Example.js 中,该模块还导入各种其他模块。

脚本位于./scripts/test.mjs 并执行以下操作:

import Example from '../src/models/Example.js';

但是,我从Example.js 首次导入:

SyntaxError: Cannot use import statement outside a module

我如何构造它以使脚本可以正确导入模块?

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    这是因为您的项目在 vanilla JS 中,import 语句不起作用。您可以使用parceljs 一个支持 ES6 及以上语法的零配置包捆绑器来使用它,首先通过运行将其添加为开发依赖项

    npm install parcel-bundler --save-dev
    

    然后将脚本添加到您的package

    {
      "scripts": {
        "dev": "parcel <your entry file>",
        "build": "parcel build <your entry file>"
      }
    }
    

    将入口文件替换为代码中的主文件(例如:app.js

    【讨论】:

      【解决方案2】:

      你试过了吗

                const Example = require('../src/models/Example.js') 
      

      【讨论】:

      • 是的,但问题是在示例中它会导入,所以第一次导入会出错
      【解决方案3】:

      现代的方法是在你的 package.json 上 添加属性调用类型并设置module的值

      {
      “name”;”project name”,
      …
      “type”;”module”,
      …
      “dependencies”:”….”,
      }
      

      默认情况下,nodejs 将你的代码作为 类型:公地 这就是为什么它说你不能在模块之外使用 import out,bcuz yow package.json 隐式地将 yow 代码标记为 commonjs 类型。 因此,在设置类型模块之后,您需要将它们的 JavaScript 文件的扩展名从 .js 更改为 .mjs。是的,你猜对了 m 来自模块。 您可以这样做或配置 Babel、webpack,同时找到圣杯和其他需要它的东西

      【讨论】:

        【解决方案4】:

        您是否尝试过使用类似 Lerna 的 monorepo 方法。

        https://lerna.js.org/

        这样您就可以直接在存储库中创建模块和依赖项。

        【讨论】:

          猜你喜欢
          • 2023-01-20
          • 2018-07-16
          • 1970-01-01
          • 1970-01-01
          • 2018-08-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-02
          相关资源
          最近更新 更多