纱线/节点-JavaScript-导入和导出问题

问题描述 投票:0回答:1

我只想从另一个文件导入函数,而我得到此错误消息:

SyntaxError:无法在模块外部使用import语句

我没有使用任何html文件。我仅将webpack使用js文件,并使用yarn start

在控制台上返回结果

这是包含我要导出的功能的文件的代码:

export function assert(value, desc) {
  return value ? console.log(desc) : console.log('fail')
}

这是我要导入功能的文件的代码:

import {assert} from './assert.js'

function juggle() {
  var result = 0;
  for(var n=0; n < arguments.length; n++) {
    result += arguments[n]
  }

  this.result = result
}

var ninja1 = {}
var ninja2 = {}

juggle.apply(ninja1, [1,2,3,4])
juggle.call(ninja2, 5,6,7,8)

assert(ninja1.result === 10, "juggled via apply")
assert(ninja2.result === 26, "juggled via call")

这里是我的package.json

我不知道解决这个问题是否有用,但是如果您想看到它,就在这里。

 {
  "name": "c",
  "version": "1.0.0",
  "main": "",
  "scripts": {   
    "start": "node Cap_03/01_apply_e_call.js",
    "test": "echo \"Error: no test specified\" && exit 1"   
     },
  "author": "",  
  "license": "ISC",
  "dependencies": {
    "webpack-dev-server": "^3.9.0"
  },
  "type": "module",  
  "devDependencies": {
    "webpack": "^4.41.2"
  },
  "description": ""
}
javascript import export node-modules yarn
1个回答
0
投票

自节点13.2.0+起

确认您已安装最新版本的Node。只需执行以下操作之一:

  • 将“类型”:“模块”添加到最近的父package.json。这样,所有.js和.mjs文件都被解释为ES模块。您可以使用.cjs扩展名将单个文件解释为CommonJS。

OR

  • 使用.mjs扩展名明确命名文件。所有其他文件,例如.js都将解释为CommonJS,如果package.json中未定义类型,则默认为CommonJS。

如果使用older Node version or have to

import语句仅在ES模块中允许。有关CommonJS中的类似功能,请参见import()。

使Node将您的文件视为ES模块you need to

  • 向package.json添加“ type”:“ module”
  • 向节点调用添加“ --experimental-modules”标志
© www.soinside.com 2019 - 2024. All rights reserved.