从另一个js文件导入函数。Javascript
我有一个关于在javascript中包含文件的问题。 我有一个非常简单的例子:从另一个js文件导入函数。Javascript,javascript,import,Javascript,Import,我有一个关于在javascript中包含文件的问题。 我有一个非常简单的例子: --> index.html --> models --> course.js --> student.js course.js: function Course() { this.id = ''; this.name = ''; } 学生有课程属性。像这样: import './course'; function Student() {
--> index.html
--> models
--> course.js
--> student.js
course.js:
function Course() {
this.id = '';
this.name = '';
}
学生有课程属性。像这样:
import './course';
function Student() {
this.firstName = '';
this.lastName = '';
this.course = new Course();
}
index.html如下所示:
<html>
<head>
<script src="./models/student.js" type="text/javascript"></script>
</head>
<body>
<div id="myDiv">
</div>
<script>
window.onload= function() {
var x = new Student();
x.course.id = 1;
document.getElementById('myDiv').innerHTML = x.course.id;
}
</script>
</body>
</html>
window.onload=function(){
var x=新学生();
x、 course.id=1;
document.getElementById('myDiv')。innerHTML=x.course.id;
}
但是我在“var x=new Student();”行上得到一个错误:
学生没有定义
当我从Student中删除导入时,我不再收到错误。
我尝试过使用(require、import、include、创建自定义函数、export),但没有一个对我有效
有人知道为什么吗?如何解决这个问题
另外,路径是正确的,它来自VS代码中的自动完成。默认情况下,脚本无法直接处理这样的导入。您可能会遇到另一个错误,即无法获取课程或无法进行导入 如果将
type=“module”
添加到
标记中,并将导入更改为/course.js
(因为浏览器不会自动附加.js部分),那么浏览器将为您下拉课程,它可能会工作
import './course.js';
function Student() {
this.firstName = '';
this.lastName = '';
this.course = new Course();
}
使用这两个文件,运行
npm安装
,然后npm启动
,您将有一台服务器运行在http://localhost:8000
它应该指向您的文件。快速浏览一下MDN,我认为您可能需要在文件名的末尾包含.js
,以便导入时读取
import./course.js'
而不是import./course'
参考:
以下内容在Firefox和Chrome中适用。在Firefox中,它甚至可以从
文件://
models/course.js
models/student.js
index.html
从“./models/Student.js”导入{Student};
window.onload=函数(){
var x=新学生();
x、 course.id=1;
document.getElementById('myDiv')。innerHTML=x.course.id;
}
您可以尝试以下操作:
//------ js/functions.js ------
export function square(x) {
return x * x;
}
export function diag(x, y) {
return sqrt(square(x) + square(y));
}
//------ js/main.js ------
import { square, diag } from './functions.js';
console.log(square(11)); // 121
console.log(diag(4, 3)); // 5
<script type="module" src="js/main.js"></script>
您还可以完全导入:
//------ js/main.js ------
import * as lib from './functions.js';
console.log(lib.square(11)); // 121
console.log(lib.diag(4, 3)); // 5
通常我们使用/fileName.js
导入自己的js文件/模块
,fileName.js
用于导入包/库
模块
当您将main.js文件包含到网页中时,必须按如下所示设置type=“module”属性:
//------ js/functions.js ------
export function square(x) {
return x * x;
}
export function diag(x, y) {
return sqrt(square(x) + square(y));
}
//------ js/main.js ------
import { square, diag } from './functions.js';
console.log(square(11)); // 121
console.log(diag(4, 3)); // 5
<script type="module" src="js/main.js"></script>
有关更多详细信息,请查看
//使用calc.js中的模块
import { multiply } from './modules.js';
const result = multiply();
console.log(`Result: ${result}`);
//Module.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Module</title>
</head>
<body>
<script type="module" src="./calc.js"></script>
</body>
</html>
模块
这是一个设计模式相同的代码可以在下面找到,请使用一个实时服务器来测试它,否则你会得到CORS错误
我现在可以链接到文档吗:我认为他在导入方面没有问题,他在尝试运行它的环境方面有问题。默认情况下,浏览器不处理导入。您是否在浏览器的F12开发工具窗口中观看了导入?浏览器尚不支持导入。可能在将来。检查此链接以了解更多信息himm,我将对此进行调查。不幸的是,它不起作用,现在它抛出了一个额外的异常。“无效响应。因此不允许访问源代码‘null’。”如果您看到这一点,则这是跨源代码异常。您是从
文件://
协议还是http://
运行它?如果您是从文件://
运行它,您将经历一段艰难的时光。文件://。那怎么办呢?如何解决这个问题?最好的方法是使用某种服务器通过localhost
为他们提供服务。有些IDE内置了它们。您还可以用几行代码编写一个快速的express
服务器。在我的回答中,我会给你一个例子。我不能使用任何服务器。很遗憾,无法工作,通过:访问'file:///........./models/student.js“来源”的“null”已被CORS策略阻止:响应无效。因此不允许访问源代码“null”。@SamySammour这是我在Chrome中得到的,但它在Firefox中也能工作。没关系;在生产环境中,您无论如何都要为文件提供服务(这会使错误消失)。这是如何实现浏览器模块支持的当前状态,因此这是您的问题的答案,无论它是否适用于您;)它在Firefox上也不起作用。它遇到了一个异常“未声明HTML文档的字符编码。如果文档包含US-ASCII范围以外的字符,则在某些浏览器配置中,文档将以乱码文本呈现。页面的字符编码必须在文档或传输协议中声明。”屏幕上没有输出如果你看到一个1
,它就工作了。异常是不相关的,是由于您的
中没有
造成的。我已经提到没有输出,屏幕是空的。为什么javascript必须如此复杂从快速浏览您的答案我可以看出您错了。未经适当努力,请勿发布答案。
<script type="module" src="js/main.js"></script>
//In module.js add below code
export function multiply() {
return 2 * 3;
}
import { multiply } from './modules.js';
const result = multiply();
console.log(`Result: ${result}`);
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Module</title>
</head>
<body>
<script type="module" src="./calc.js"></script>
</body>
</html>