在浏览器中使用模块(没有 WebPack)

2024-02-17

我正在摸索 ES6 的过程,遇到了模块(很好!),在学习过程中,我试图看看是否可以在浏览器中使用它们withoutWebPack(我还没学过)。

  1. 所以,我的 JS 目录中有以下文件/文件夹结构

    js
    
     - lib (for complied es6 via Babel)
       - mods (compiled modules)
         - module.js (compiled via Babel)
       - app.js (imports modules, attached to index.html)
    
     - src (for "raw" es6)
       - mods (es6 modules)
         - module.js (es6 module)
       - app.js (imports modules)
    
  2. 在 js/src/mods/module.js 中,我有以下代码......

    export const topTime = 1.5;
    
    export const subTime = 0.75;
    
  3. 由 js/src/app.js 导入...

    import { topTime, subTime } from './mods/modules';
    
    console.log(topTime);
    
    console.log(subTime);
    
  4. 然后我将所有 es6 文件编译为 es5(将文件放置在 lib 目录中)。

    npm run babel
    
  5. Now I can在我的编辑器(vscode/output 选项卡)中运行主文件(js/lib/app.js)

    [Running] node "/home/me/www/es6.local/js/lib/app.js"
    
    1.5
    
    0.75
    

...但我认为这只是因为它在节点中运行。

  1. 当我在浏览器(FF)中调用我的index.html文件(带有js/lib/app.js)时,它会中断,因为我收到以下错误...

    ReferenceError: require is not defined
    
  2. 所以我看到 babel 编译了这个......

    import { topTime, subTime } from './mods/modules';
    

    进入这个...

    var _modules = require('./mods/modules');
    

...但我认为这是有效的 es5? ...不?那么在 webpack 之前这是如何完成的呢?请指教。


这是我的package.json(如果有帮助的话)...

{
  "name": "es6.local",
  "version": "0.0.1",
  "description": "JavaScript ES6 Testing Sandbox",
  "main": "index.html",
  "scripts": {
    "babel": "babel js/src --out-dir js/lib --source-maps"
  },
  "author": "Student",
  "license": "ISC",
  "devDependencies": {
    "eslint": "^4.16.0",
    "eslint-plugin-import": "^2.8.0",
    "eslint-plugin-jsx-a11y": "^6.0.3",
    "eslint-plugin-react": "^7.6.0",
    "eslint-config-airbnb": "^16.1.0",
    "babel-cli": "^6.26.0",
    "babel-polyfill": "^6.26.0",
    "babel-preset-env": "^1.6.1"
  },
  "babel": {
    "presets": [
      [
        "env",
        {
          "targets": {
            "browsers": [
              "last 2 versions",
              "safari >= 7"
            ]
          }
        }
      ]
    ]
  }
}

我已经被这个问题困扰了一段时间,经过一番尝试后我找到了解决方案。 您不需要任何库或 webpack 来执行此操作,并且我不确定这是否可以在 chrome 之外工作。

  1. 您需要在网络服务器上运行此代码,否则它将无法工作(换句话说,它必须位于本地主机上,而不是 file:// 上)
  2. 建立一个文件夹,名为jsmodule
  3. 创建一个名为index.html使用以下代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Js module</title>
</head>
<body>
    <h1>JS module test</h1>
    <script type="module" src="script.js"></script>
</body>
</html> 
  1. 在同一文件夹中创建一个名为script.js使用以下代码:
import Person from './Person.js';
import Book from './Book.js';


let person1 = new Person();
let someBook = new Book();
  1. 在同一文件夹中创建一个名为Person.js使用以下代码:
export default class Person{
    constructor(){
        alert("hallo from person");
    }
}
  1. 在同一文件夹中创建一个名为Book.js使用以下代码:
export default class Book{
    constructor(){
        alert("Hallo from book");
    }
}
  1. Run the index.html在您的网络服务器上(本地主机)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在浏览器中使用模块(没有 WebPack) 的相关文章

随机推荐

  • 操纵事件和平移模式

    我正在开发一个用于触摸设备的 WPF 我面临一个奇怪的问题 我的 XAML 结构是
  • 在 Winforms 中检测空闲用户

    如果用户有 5 分钟不活动 我想暂停我的程序 我所说的不活动是指在那段时间没有按下鼠标或键盘 包括在程序之外 有什么出发点吗 在计时器内你可以 p invokeGetLastInputInfo http www pinvoke net de
  • 一次性编写字典?

    我很想在 Python 中拥有一个一次性写入的字典对象 这样 my dict 1 foo my dict 2 bar my dict 1 baz Raises KeyError 我可以想象制作一个简单的食谱 但我想知道是否存在经过深思熟虑的
  • 如何在 win32 中创建具有默认行为的按钮

    我一直在尝试创建一个具有默认行为的按钮 即当用户按 ENTER 时 该按钮将被触发 我使用 WS TABSTOP 样式创建了按钮 并向其发送了带有 BS DEFPUSHBUTTON has WPARAM 参数的 BM SETSTYLE 消息
  • 如何访问具有数组类型值的 Solidity 映射?

    我定义了一个映射类型的状态变量 例如映射 uint256 gt uint256 我想将其公开 以便我可以从合同之外访问它 但是编译器报错TypeError Wrong argument count for function call 1 a
  • Android ListView 排序

    我只是从 Android 开发开始 虽然 Milestone 是一个不错的设备 但 Java 不是我的自然语言 而且我在 Android SDK Eclipse 和 Java 本身的 Google 文档上遇到了困难 反正 我正在为 Andr
  • Realm Swift 回调函数

    我使用 swift3 和 Realm 2 3 交易完成后我需要回调 例如 我有如下代码 如何在领域数据事务完成后获得回调 DispatchQueue main async try self realm write self realm ad
  • LINQ - (x, i) 做什么?

    我今天偶然发现了这段代码 并意识到我根本不理解它 someArray Select x i gt new XElement entry new XElement field new XAttribute name Option i 1 重点
  • 从 VS2015 发布后,DNX Web 命令抛出“无法解析项目”错误

    这是关于 net core 的过时预发布版本 我使用 Visual Studio 2015 的测试版 预览版在预发布的 ASP Net 5 后来更名为 asp net core 中创建了一个基本项目 我已将该项目发布到文件系统并尝试运行它从
  • iOS Swift 标签栏图标插入在运行时被删除

    我在标签栏控制器中有两个 ViewController 在界面生成器中 我已将图像插图 5 5 5 5 应用于选项卡栏图标 以获得我想要的尺寸 当我最初运行模拟器时 一切看起来都很棒 但是当我使用 Tab 键切换到第二个 ViewContr
  • Airconsole 和 Unity 集成问题

    首先 我是 Unity 和 Airconsole 这两个平台的新手 我只是在探索与空调集成的统一 但我在导入 空调插件插件 时遇到错误 从Asset Store 我正在使用最新版本的unity2018 3 0f2 Personal在 Win
  • MEAN JS - 主要 html 文件 (index.html) 位于哪里

    我刚刚开始学习 MEAN JS 我正在尝试查找主页的 html 文件 但是我只在视图文件夹中看到 home client view html 和 header clinet view html 据我所知 通常有一个主html 包含了主页的所
  • glGetString 和 glGetShaderInfoLog 等函数使用什么编码

    OpenGL有一些功能 例如glGetString and glGetShaderInfoLog返回字符串 这些使用什么形式的文本编码 我认为 鉴于它们作为GLchar 它是返回值中包含的 ASCII 编码文本 但这是否在任何地方指定 作为
  • Flutter守护进程启动失败

    我每次打开时都会收到此警告VS code 有什么办法可以解决这个问题吗 谢谢 我添加了这个警告的日志 我努力了扑干净 and 扑医生一切都很好 但是每次我打开 VS Code 时仍然出现此警告 我还遇到了一个问题 VS Code 显示没有设
  • 实体框架 Linq 等于值或为 null

    我正在尝试使用 linq 从视图中获取项目列表 其中字段 LocationId 为值或为 null LocationId 字段是 int 我正在尝试的代码是这样的 var items context Items Where d gt d L
  • 每个工人的最大日期

    考虑两个表 工作表有如下字段W ID W Name 课程表有如下字段C ID C Name C Date 一个工人可以选修多门课程 一门课程也可以由许多工人选修 因此 两个表之间存在多对多关系 打破多对多 并创建一个名为 Takes 的新表
  • 如何调整 IntelliJ 中行尾的位置

    在 IntelliJ 中 就像在 Eclipse 中一样 代码编辑器中有一条细灰色垂直线 我假设就像在 Eclipse 中一样 该行显示了 行尾 应该在的位置 2个问题 1 在IntelliJ中哪里可以调整一行的长度 2 如果不使用与 1
  • React-Router:使用 Navlink 将道具从一个组件传递到另一个组件

    我在用
  • 如何通过svelte访问本地json文件?

    现在我使用 onMount 异步函数来访问 const dataAPI jsfwperf json let data onMount async gt const res await fetch dataAPI then res gt re
  • 在浏览器中使用模块(没有 WebPack)

    我正在摸索 ES6 的过程 遇到了模块 很好 在学习过程中 我试图看看是否可以在浏览器中使用它们withoutWebPack 我还没学过 所以 我的 JS 目录中有以下文件 文件夹结构 js lib for complied es6 via