我目前正在尝试在我的(Firebase)nodejs项目中导入和使用nanoid。
npm i nanoid
我试着用
import { nanoid } from 'nanoid'
以及
import { nanoid } from '../node_modules/nanoid/nanoid.js'
我尝试的一切都失败了。我是一个完全的nodejs和js本身的初学者,但是没有网站或文档帮助我修复这个问题。我只想要一个唯一的id:(
这里是我的index.html(减少到最小:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Firebase Hosting</title>
!!!Here are Firebase imports!!!
<script defer src="/__/firebase/init.js?useEmulator=true"></script>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="registerContainer">
<div class="registerContent">
<h1 id="title">Sign up</h1>
<iframe name="hiddenFrame" width="0" height="0" border="0" style="display: none;"></iframe>
<form id="form" onsubmit="return false">
<!-- Birth date Input (required) -->
<div class="input_field">
<input id="date" onfocus="(this.type = 'date')" class="text_input" type="text" name="birthdate" placeholder="Geburtsdatum" required />
</div>
<!-- Checkbox 1 -->
<div class="input_field checkbox_option">
<input type="checkbox" id="cb1" class="checkbox">
<label for="cb1">I agree with terms and conditions</label>
</div>
<input class="button" id="registerUser" type="submit" value="Anmelden"/>
</form>
</div>
</div>
<script src="app.js"></script>
</body>
</html>
app.js:
const nanoid = require('nanoid');
document.addEventListener('DOMContentLoaded', event => {
const app = firebase.app();
const db = firebase.firestore();
const users = db.collection('users');
})
async function addUser() {
console.log('adding User');
const db = firebase.firestore();
const users = db.collection('users');
const data = {
email: document.getElementById("email").value,
test_active: false
};
code = nanoid(10).toString();
await users.doc(code).set(data);
}
5条答案
按热度按时间cetgtptt1#
根据你现有的评论,你似乎是在浏览器中运行这段代码,而且你的项目中也没有browserify或任何其他捆绑程序。
该结论来自于您注解了错误这一事实
未定义require
require
是一个服务器端NodeJS项目特有的函数,在浏览器中不存在。如果你想使用require函数,你需要使用browserify或webpack这样的捆绑器,它会从node_modules文件夹中获取相关的包,并将它们捆绑在一起供前端使用。你之所以会得到
应为JavaScript模块脚本,但服务器响应的MIME类型为"text/html"。根据HTML规范对模块脚本强制执行严格的MIME类型检查。
错误是因为当你要求javascript运行以下:
浏览器认为包含当前页面的目录也具有称为
nanoid
的文件,并且正在请求该文件。请考虑以下几点:如果我的页面在https://google.com,我的代码说
import {nanoid} from 'nanoid'
,浏览器将向https://google.com/nanoid
发出请求,浏览器期待一个javascript文件,但它可能收到一个错误404 html页面。请记住,浏览器无法访问您的
node_modules
文件夹,除非它在您的Web服务器上公开,在这种情况下,您需要告诉它您试图导入的文件的确切路径。你能做什么?
你可以添加webpack或browserify或其他一些捆绑到您的项目,但这可能需要一点工作,你提到你是一个初学者,所以我不认为这将是一个好主意,跳的权利。
另一种选择可能是将浏览器版本的nanoid代码直接添加到您自己的项目中。
我从github https://github.com/ai/nanoid/blob/main/index.browser.js中提取了浏览器版本的代码,并将其放入下面的script标签中(去掉urlAlphabet导入),您可以将其添加到您的代码中。请记住,此代码将全局添加
nanoid
,customAlphabet
,customRandom
,urlAlphabet
和random
变量,因此请确保与您的全局变量没有任何冲突。xpcnnkqh2#
谁有这个错误:
错误[错误_请求_ESM]:...
作者从nanoid@4.0.0起移除了CommonJS支持
1.尝试使用ESM模块导入
1.或者使用nanoid@3.0.0:第一个月
qcbq4gxm3#
我正在用这个纳米机器人,让我分享我的概念验证,
6qqygrtg4#
尝试在请求
{ nanoid }
之前添加圆括号,然后声明一个名为ID
的变量来存储它:5vf7fwbs5#
我用的是纳米机器人2.1.9版