如何在nodejs中安装nanoid?
How to install nanoid in nodejs?
我目前正在尝试在我的 (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);
}
我正在使用这个纳米机器人,让我分享我的 POC,
import {nanoid} from 'nanoid';
const id = nanoid(length).toString();
我使用的是 nanoid 版本 2.1.9
const nanoid = require('nanoid')
let id = nanoid(5)
尝试在 { nanoid }
周围添加圆括号,然后声明一个名为 ID
的变量来存储它:
var { nanoid } = require('nanoid');
var ID = nanoid();
根据您现有的评论,您似乎 运行 在浏览器中使用此代码,并且您的项目中也没有 browserify 或任何其他捆绑器。
该结论来自于您评论说您遇到了错误
require is not defined
require
是服务端 NodeJS 项目特有的函数,在浏览器中不存在。如果你想使用 require 函数,你需要使用像 browserify 或 webpack 这样的捆绑器,它们将从你的 node_modules 文件夹中获取相关的包并将它们捆绑在一起供你的 front-end 使用。
您获得
的原因
Expected a JavaScript module script but the server responded with a MIME type of "text/html". Strict MIME type checking is enforced for module scripts per HTML spec.
错误是因为当您向 javascript 询问 运行 以下内容时:
import {nanoid} from 'nanoid';
浏览器认为包含当前页面的目录也有一个名为 nanoid
的文件,并且正在请求该文件。
考虑以下几点:
如果我的页面位于 https://google.com 并且我的代码显示 import {nanoid} from 'nanoid'
浏览器将向 https://google.com/nanoid
发出请求并且浏览器期待 javascript 文件但它可能会收到一个错误 404 html 页。
请记住,浏览器无法访问您的 node_modules
文件夹,除非它在您的网络服务器上公开显示,在这种情况下,您需要告诉它您要导入的文件的确切路径。
你能做什么?
您可以将 webpack 或 browserify 或其他一些捆绑器添加到您的项目中,但这可能需要一些工作并且您提到您是初学者所以我认为直接跳转不是个好主意英寸
另一种选择可能是将 nanoid 代码的浏览器版本直接添加到您自己的项目中。
我从 github https://github.com/ai/nanoid/blob/main/index.browser.js 中获取了代码的浏览器版本,并将其放入下面的脚本标记中(去掉 urlAlphabet 导入),您可以将其添加到您的代码中.请记住,此代码将全局添加 nanoid
、customAlphabet
、customRandom
、urlAlphabet
和 random
变量,因此请确保没有任何冲突你的全局变量。
<!-- Code for nanoid directly from the github with urlAlphabet import removed -->
<!-- https://github.com/ai/nanoid/blob/main/index.browser.js -->
<script>
let urlAlphabet =
'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'
let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))
let customRandom = (alphabet, size, getRandom) => {
let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1
let step = -~((1.6 * mask * size) / alphabet.length)
return () => {
let id = ''
while (true) {
let bytes = getRandom(step)
let j = step
while (j--) {
id += alphabet[bytes[j] & mask] || ''
if (id.length === size) return id
}
}
}
}
let customAlphabet = (alphabet, size) => customRandom(alphabet, size, random)
let nanoid = (size = 21) => {
let id = ''
let bytes = crypto.getRandomValues(new Uint8Array(size))
while (size--) {
let byte = bytes[size] & 63
if (byte < 36) {
// `0-9a-z`
id += byte.toString(36)
} else if (byte < 62) {
// `A-Z`
id += (byte - 26).toString(36).toUpperCase()
} else if (byte < 63) {
id += '_'
} else {
id += '-'
}
}
return id
}
</script>
<p id="code"></p>
<!-- You can now use the nanoid() function in your javascript code -->
<script>
const id = nanoid();
document.getElementById("code").innerHTML = id;
</script>
我目前正在尝试在我的 (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);
}
我正在使用这个纳米机器人,让我分享我的 POC,
import {nanoid} from 'nanoid';
const id = nanoid(length).toString();
我使用的是 nanoid 版本 2.1.9
const nanoid = require('nanoid')
let id = nanoid(5)
尝试在 { nanoid }
周围添加圆括号,然后声明一个名为 ID
的变量来存储它:
var { nanoid } = require('nanoid');
var ID = nanoid();
根据您现有的评论,您似乎 运行 在浏览器中使用此代码,并且您的项目中也没有 browserify 或任何其他捆绑器。
该结论来自于您评论说您遇到了错误
require is not defined
require
是服务端 NodeJS 项目特有的函数,在浏览器中不存在。如果你想使用 require 函数,你需要使用像 browserify 或 webpack 这样的捆绑器,它们将从你的 node_modules 文件夹中获取相关的包并将它们捆绑在一起供你的 front-end 使用。
您获得
的原因Expected a JavaScript module script but the server responded with a MIME type of "text/html". Strict MIME type checking is enforced for module scripts per HTML spec.
错误是因为当您向 javascript 询问 运行 以下内容时:
import {nanoid} from 'nanoid';
浏览器认为包含当前页面的目录也有一个名为 nanoid
的文件,并且正在请求该文件。
考虑以下几点:
如果我的页面位于 https://google.com 并且我的代码显示 import {nanoid} from 'nanoid'
浏览器将向 https://google.com/nanoid
发出请求并且浏览器期待 javascript 文件但它可能会收到一个错误 404 html 页。
请记住,浏览器无法访问您的 node_modules
文件夹,除非它在您的网络服务器上公开显示,在这种情况下,您需要告诉它您要导入的文件的确切路径。
你能做什么?
您可以将 webpack 或 browserify 或其他一些捆绑器添加到您的项目中,但这可能需要一些工作并且您提到您是初学者所以我认为直接跳转不是个好主意英寸
另一种选择可能是将 nanoid 代码的浏览器版本直接添加到您自己的项目中。
我从 github https://github.com/ai/nanoid/blob/main/index.browser.js 中获取了代码的浏览器版本,并将其放入下面的脚本标记中(去掉 urlAlphabet 导入),您可以将其添加到您的代码中.请记住,此代码将全局添加 nanoid
、customAlphabet
、customRandom
、urlAlphabet
和 random
变量,因此请确保没有任何冲突你的全局变量。
<!-- Code for nanoid directly from the github with urlAlphabet import removed -->
<!-- https://github.com/ai/nanoid/blob/main/index.browser.js -->
<script>
let urlAlphabet =
'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'
let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))
let customRandom = (alphabet, size, getRandom) => {
let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1
let step = -~((1.6 * mask * size) / alphabet.length)
return () => {
let id = ''
while (true) {
let bytes = getRandom(step)
let j = step
while (j--) {
id += alphabet[bytes[j] & mask] || ''
if (id.length === size) return id
}
}
}
}
let customAlphabet = (alphabet, size) => customRandom(alphabet, size, random)
let nanoid = (size = 21) => {
let id = ''
let bytes = crypto.getRandomValues(new Uint8Array(size))
while (size--) {
let byte = bytes[size] & 63
if (byte < 36) {
// `0-9a-z`
id += byte.toString(36)
} else if (byte < 62) {
// `A-Z`
id += (byte - 26).toString(36).toUpperCase()
} else if (byte < 63) {
id += '_'
} else {
id += '-'
}
}
return id
}
</script>
<p id="code"></p>
<!-- You can now use the nanoid() function in your javascript code -->
<script>
const id = nanoid();
document.getElementById("code").innerHTML = id;
</script>