我安装了Node 8.9.1(v10.5.0中也出现同样的问题)。
我正在尝试在带有.mjs
import { throttle } from lodash;
我跑:
node --experimental-modules index.mjs
我得到了:
SyntaxError:请求的模块'lodash'不提供名为'throttle'的导出 在ModuleJob._instantiate(internal / modules / esm / module_job.js:80:21)
--experimental-modules
应该stop being experimental in v10 LTS,那么为什么没有更多的模块作者跳上这个潮流呢?
答案 0 :(得分:6)
--experimental-modules
尚不支持命名导出:
-实验模块不支持从commonjs模块(节点自身的内置组件除外)导入命名导出。
这就是为什么您无法使用语法的原因:
import { throttle } from lodash;
至少(至少现在)必须这样做:
import lodash from lodash;
const { throttle } = lodash;
大概有一天,Node将增加对所有ES Module功能的支持。
答案 1 :(得分:3)
我只是在nodejs express * .mjs文件和为Googleapis启用 @IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
CATransaction.begin()
let animation = CABasicAnimation(keyPath: "position")
animation.fromValue = [view.layer.frame.width, 200]
animation.toValue = [0, 200]
animation.duration = 25.0
animation.repeatCount = .greatestFiniteMagnitude
button.layer.add(animation, forKey: "animatePosition")
CATransaction.commit()
}
标志的情况下遇到了这个错误。
从“ googleapis”导入{google};
SyntaxError:请求的模块“ googleapis”未提供名为“ google”的导出
解决方案
import os
def connectToGoPro(user, host, password):
command = "sshpass -p "+password+ " ssh " + user+"@"+host+" 'cd /boot; ls -l'"
os.system(command) //This bit works
def takePhotos(fileName, captureCount):
os.system("python3 ''"+ fileName + "' "+str(captureCount)+"'") //This bit doesn't work
我不明白为什么会这样;如果有人知道为什么,请发表评论。
答案 2 :(得分:1)
您必须使用.mjs
扩展名。
设置完成后,以.mjs结尾的文件将能够作为ES模块加载。
参考:https://nodejs.org/api/esm.html
更新
您似乎还没有导出该方法。
假设我有hello.mjs
内容
export function sayHello() {
console.log('hello')
}
我可以在index.mjs
这样使用它
import {sayHello} from './hello.mjs'
sayHello()
答案 3 :(得分:0)
如果lodash已被编写为模块,并且lodash/index.mjs
导出了throttle
:export const throttle = ...;
,那么您将能够import { throttle } from lodash;
这里的问题是,在commonjs中,没有诸如命名导出之类的东西。这意味着在commonjs模块中只能导出一件事。
所以认为lodash会导出一个包含名为throttle
的属性的对象。
对于问题的第二部分,我相信人们一旦不再进行实验,就会慢慢开始采用ES模块。在撰写本文时,它仍然是(Node.js v11.14)。
答案 4 :(得分:0)
对于我来说,像 ES Library 一样加载lodash,这是 NPM软件包。
Lodash库导出为 ES模块。 https://www.npmjs.com/package/lodash-es
然后,您可以通过常规方式导入实用程序。
import { shuffle } from 'lodash-es';
答案 5 :(得分:0)
@machineghost答案有效。我记得还向package.json中添加了'type':'module'
以及在节点v12(LTS)上使用esm,并且效果很好。##标题##
我将节点更新为v14(当前),但出现错误
C:\Users\andey\Documents\Project\src\app.js:1
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module:
C:\Users\andey\Documents\Project\src\app.js
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1217:13) {
code: 'ERR_REQUIRE_ESM'
}
要修复此问题,我必须从package.json中删除'type':'module'
。