代码之家  ›  专栏  ›  技术社区  ›  Dorritos

如何在客户端代码中使用requirejs

  •  0
  • Dorritos  · 技术社区  · 4 年前

    所以最近我在做一个网站,我添加了一个登录页面。我想检查输入的用户名和密码是否存在于数据库中,如果不存在,它会发出警报,说用户名或密码无效。我的代码是:

    <form>
      <label>Enter Username:</label>
      <input type="text" id="username">
      <br>
      <label>Enter Password:</label>
      <input type="password" id="password">
      <br>
      <input type="submit" onclick="submitLoginInfo()">
    </form>
    

    js是

    const { LoginSchemaModel } = require('./dbconfig.js')
    // import { LoginSchemaModel } from './dbconfig'
    requirejs()
    function submitLoginInfo () {
        let usernameElement = document.querySelector('#username')
        let passwordElement = document.querySelector('#password')
    
        console.log(`Username Element is HTMLElement: ${usernameElement instanceof HTMLElement}`);
        console.log(`Username Element is HTMLElement: ${passwordElement instanceof HTMLElement}`);
    
        alert(`usernameElement = ${usernameElement}`);
        alert(`passwordElement = ${passwordElement}`);
    
        alert(`username = ${usernameElement.value}`);
        alert(`password = ${passwordElement.value}`);
      }
    

    现在问题出在require上,因为它不受支持。所以我决定使用导入,并将“type”=“module”添加到我的package.json中,但控制台中仍然出现错误,说我不能使用它。然后我使用了requirejs,遇到了这个问题,如果不使用require函数,我就无法导入requirejs。当我试图添加

    var requirejs = require('requirejs')
    
    requirejs.config({
        nodeRequire: require
    }); 
    

    它会说我不能使用require()。当我试着在一个单独的文件中做这件事时,我意识到我必须要求该文件使用requirejs,这是行不通的。我不知道如何解决这个问题,我一直在搜索堆栈溢出和其他网站,但没有提到这一点。我想知道是否有另一种方式是我一直错过的。

    0 回复  |  直到 4 年前
        1
  •  1
  •   user18101096 user18101096    4 年前

    我假设您只是用一个将在客户端运行的脚本在一些HTML中声明js。就像那样 <script src="./myscript.js"></script>

    为什么你不能使用 require

    要求 是我们在Node.js(一个在浏览器外运行javascript的引擎)或任何其他采用 CommonJs modules 图案浏览器使用所谓的 ESModules .

    为什么在中更改type=“module” package.json 没有解决这个问题吗?

    这个 package.json 文件被浏览器完全忽略,它不会影响从script标记导入的javascript中的任何内容。 package.json 是node.js(和其他引擎)使用的文件。和 type="module" 在Node.js中使用 import 而不是 要求 ,所以即使浏览器读取了它也不会修复。

    我们如何在浏览器javascript中导入东西

    首先,我不得不说,浏览器通常希望人们使用一些 bundling tool like webpack .(bundler只是一个将所有.js文件转换为单个.js文件的程序),而不是直接导入模块,但如果您只想使用web浏览器,则可以:

    1. 在脚本标记中添加type=“module”。 <script type="module" src="./myscript.js"></script>

    2. 使用类似的东西 the live server extension of vscode 因为浏览器不能让.html文件完全访问您的文件,所以您需要在文件夹中模拟服务器。

    3. 所以现在你可以简单地使用 import {thing} from "./myscript.js" 这会奏效的。

    如何使用 require.js lib。

    我不得不说,你不应该使用它,它被那些希望为node.js制作一些包在浏览器上工作的人使用。但如果一个人想使用只需要使用浏览器,他们必须记住,当我们这样做时 npm i requirejs 它创建并下载到 node_modules 文件夹,所以我们必须从那里导入。但同样,你不应该这样做来解决你的问题。坚持 进口 .