뭔가 다른 자바스크립트 비슷한 '의 JavaScript 파일을 포함할 수 있는' @import CSS δ1 다른 JavaScript 파일을?
이전 버전의 없었고, 그래서 많은 다양한 방식, 또는 요구하는 임포트합니다 JavaScript 포함시키십시오 이 문제에 대한 개발해 왔다. 하지만 2015년 (es6), javascript 가 경식도 [es6 모듈에서는] (http://exploringjs.com/es6/ch_modules.html) 에서 지원하는 모듈을 표준 가져오기할 node. js, 수도 있는 [대부분의 최신 브라우저] (https://caniuse.com/ # 성과 = es6 모듈에서는). 오래된 브라우저 호환성을 위해, 내용] (https://webpack.github.io/) 및 / 또는 [트란스필라티온] (https://babeljs.io/) 도구를 사용할 수 있습니다.
ECMAScript (ES6) 모듈을 통해 '에서' 이후 지금까지 node. js v8.5 실험 모듈 플래깅. 관련된 모든 파일이 있어야 합니다 '' 오마이스 확장자입니다.
// module.mjs
export function hello() {
return "Hello";
}
// main.mjs
import { hello } from 'module'; // or './module'
let val = hello(); // val is "Hello";
그동안 직접 ECMAScript 모듈에서는 로드을 대한 지원 브라우저 (no 같은 도구를 웹팩 필요) [후] (https://jakearchibald.com/2017/es-modules-in-browsers/), 구글 크롬, 파이어폭스, 사파리 10.1 60, 61 및 면쪽 16. 현재 지원 부서 확인란 [카니우스] (https://caniuse.com/ # 성과 = es6 모듈에서는).
<script type="module">
import { hello } from './hello.mjs';
hello('world');
</script>
// hello.mjs
export function hello(text) {
const div = document.createElement('div');
div.textContent = `Hello ${text}`;
document.body.appendChild(div);
}
자세한 정보 dell. https://jakearchibald.com/2017/es-modules-in-browsers/
필요에 따라 다른 스크립트에만 로드하십시오 동적임 임포트합니다 스크립트입니다 하겠습니다.
<script type="module">
import('hello.mjs').then(module => {
module.hello('world');
});
</script>
자세한 정보 dell. https://developers.google.com/web/updates/2017/11/dynamic-import
여전히 널리 사용되고 있는 오래된 스타일의 임포트하지 모듈에서는 node. js 는 [module.exports/require] (https://nodejs.org/api/modules.html) 시스템.
// mymodule.js
module.exports = {
hello: function() {
return "Hello";
}
}
// server.js
const myModule = require('./mymodule');
let val = myModule.hello(); // val is "Hello"
다른 방법도 있습니다 브라우저에 대한 내용을 포함하는 JavaScript 를 필요로 하지 않는 외부 JavaScript 전처리.
Ajax 호출을 사용할 수 있습니다 다음 '평가' 를 추가로 로드하십시오 스크립트입니다 하기 때문이다. 하지만 이것이 가장 직설적으로 제한되는지 데이터베이스에구성원을 도메인임 슬픔으로창백해지고 JavaScript 스캔박스 보안 모델. 또한 '평가' 를 사용하여 문을 열 버그, hacks 및 보안 문제.
하나 이상의 스크립트에만 같은 동적 임포트합니다 함께 로드할 수 있습니다 '약속' 페치할 콜을 사용하여 실행 순서에 대한 컨트롤입니다 스크립트입니다 종속물과의 [페치할 투입] (https://git.habd.as/jhabdas/fetch-inject) 라이브러리:
fetchInject([
'https://cdn.jsdelivr.net/momentjs/2.17.1/moment.min.js'
]).then(() => {
console.log(`Finish in less than ${moment().endOf('year').fromNow(true)}`)
})
이 jQuery library) 은 로딩 기능을 한 줄:
$.getScript("my_lovely_script.js", function() {
alert("Script loaded but not necessarily executed.");
});
태그로 HTML 에 uirl 스크립트입니다 스크립트입니다 추가할 수 있다. Jquery 오버헤드를 피하기 위해, 이상적인 솔루션입니다. 서로 다른 서버에서 스크립트입니다 있을 수도 있습니다. 또한 코드 있지만브라우저에 평가합니다. 이 ',' 태그 '에 투입될 수 있는 웹 페이지, script> < 인컨텍스트 < head>', ',', 또는 삽입됨 직전 닫기와 /body> 태그이고, <. 이 예는 여기 어떻게 할 수도 있다.
function dynamicallyLoadScript(url) {
var script = document.createElement("script"); // create a script DOM node
script.src = url; // set its src to the provided URL
document.head.appendChild(script); // add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead)
}
이 기능은 추가하기에서는 새 ',' 태그번호 script> <, 끝까지 헤드입니다 섹선에서 페이지 URL 에 있는 ',' src 속성을 설정되었습니다 역할을 주어지는 첫 번째 매개변수입니다. 이 솔루션은 모두 함께 설명한 JavaScript Madness: 동적 스크립트입니다 로드중.
이제 알면 큰 문제가 없다고 합니다. 너회가 원격으로요 읽어들입니다 코드의 그렇게 할 수 있음을 시사했다. 현대의 모든 웹 브라우저에서 실행 파일을 불러올 것입니다, 항상 비동기적으로 로드하십시오 성능 향상을 위해 현재 스크립트입니다 있기 때문이다. (이 두 방법 및 수동 동적임 스크립트입니다 qic 로드중 방법을 포함한다.)
var js = document.createElement("script");
js.type = "text/javascript";
js.src = jsFilePath;
document.body.appendChild(js);
var s = new MySuperObject();
Error : MySuperObject is undefined
그런 다음 페이지를 다시 로드하십시오 < F5< /kbd>;;; kbd> 많다. 및 작동하잖아! 혼란스럽다.
function loadScript(url, callback)
{
// Adding the script tag to the head as suggested before
var head = document.head;
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
// Then bind the event to the callback function.
// There are several events for cross browser compatibility.
script.onreadystatechange = callback;
script.onload = callback;
// Fire the loading
head.appendChild(script);
}
그런 다음 코드를 기록하십시오 스크립트입니다 로드되었는지 후 사용할 수 있는 람다 함수:
var myPrettyCode = function() {
// Here, do whatever you want
};
그런 다음 모두실행 다음과 같이 밝혔다:
loadScript("my_lovely_script.js", myPrettyCode);
참고로, 스크립트가 실행 후, 또는 전에는요, DOM 은 브라우저와 작성하든지 선 '에 따라 로드되었는지 스크리pt.라인스 = false;'. S # 39, there& [멋지구리해요 기사를 일반적으로 Javascript 로드중] (http://www.html5rocks.com/en/tutorials/speed/script-loading/) 이 있는 ich5r.
이 질문에 맨 위에 언급한 것처럼, 많은 개발자가 되기 위해, 또는 바벨 (s) / 트란스필라티온 구축하십시오 웹팩 같은 도구를 사용할 수 있게 되어, 이번 프로젝트에 대한 하위 호환성을 제공하는 구문, JavaScript, 이전 버전의 브라우저와 파일 결합, 작게 하다 실행하십시오 코드 분할 상술합니다.
만약 누군가 레키레이스 (try out), 좀 더 고급 찾고 있다. # 39, ll get 추가되든지 you& 방지 등의 혜택을 상관 관계 관리, 더 나은 복제에서는 동시성 (즉, 검색 스크랩트 두 번 이상).
Javascript 파일을 ", modules" 작성할 수 있습니다. 그 후 참조입니다 솔리드로 종속물과의 스크립트입니다. 또는, 받아들이는 단순한 " afaq afnor script" 검색하기를 레키레이스 사용할 수 있습니다. 솔루션.
예:
모듈로 종속도를 정의합니다.
define(['lib/dependency1', 'lib/dependency2'], function (d1, d2) {
//Your actual script goes here.
//The dependent scripts will be fetched if necessary.
return libraryObject; //For example, jQuery object
});
, 는 자신의 " 림프레멘테이션.j스 main". Some-dependency.js javascript 파일을 의존하는
require(['some-dependency'], function(dependency) {
//Your script goes here
//some-dependency.js is fetched.
//Then your script is executed
});
2 의 [깃허브] 발췌문 추가 정보:
>. 물론 일반 JavaScript 파일을 더 정의된 레키레이스 로드되는지 >. 모듈에서는. 이는 사용할 수 있도록 최적화됩니다 등 내장 웹 >. 하지만, 근로자 등 기타 JavaScript 에서 사용할 수 있는 환경, >. 라이노 및 노드입니다. 비동기적입니다 모듈에서는 apiu 구현합니다. >. >. 일반 스크립트입니다 레키레이스 /dev/raw/raw1 주기표시 로드하기에 모듈에서는 / 파일, 그렇게 해야 합니다. >. 디버깅하지 쉽게 사용할 수 있습니다. 단순히 기존 로드하기에 사용할 수 있습니다 >. 기존 없이 프로젝트를 도왔으매 javascript 파일을 추가할 수 있습니다 >. 다시 쓰기 너회의 JavaScript files. 필요 >. >. .
실제로 is JavaScript 파일을 로드할 수 있는 방법이 있을 수 있도록 기능을 사용할 수 있는 not 비동기적으로 새로 포함된 모든 브라우저에서 파일 로드되었는지 직후 정보기술 (it), 로드중 작동하잖아 생각한다.
이케리스타펀트 () ',' 를 사용해야 할 때 ',' 요소, 즉 < head> 페이지에.
$("head").append('<script type="text/javascript" src="' + script + '"></script>');
그러나 이 방법은 또한 문제: [파이어버그] [1] 에서 오류가 발생할 경우 임포트된 JavaScript 파일을 (또한 오류 콘솔 및 크롬 개발자 도구 Firefox 에서도 배치하십시오 보고하고 그 잘못 사용할 경우, 이는 큰 문제가 방화범 추적하기 위해 JavaScript 오류뿐만 다운되어도 많이유 (나는한다). # 39, 방화범 doesn& 단순히 어떤 이유로 새로 로드되었는지 대해서는 알 수 없는 오류가 발생하면 그 파일을 파일 때문에 발생한 것이어서 이 보도에 따르면, 주 업무는 HTML 파일이므로 어려움을 아웃해야 합니다 진짜 이유는 오류가 발생합니다.
그런 후 이 방법은 없는 신앙이니라 문제를 해결하기 위해 노력해야 합니다.
I have a $ .import_js () 이 방법을 사용하는 것을 실제로 기록되었으므로 플러그인에는 포함한다.
(function($)
{
/*
* $.import_js() helper (for JavaScript importing within JavaScript code).
*/
var import_js_imported = [];
$.extend(true,
{
import_js : function(script)
{
var found = false;
for (var i = 0; i < import_js_imported.length; i++)
if (import_js_imported[i] == script) {
found = true;
break;
}
if (found == false) {
$("head").append('<script type="text/javascript" src="' + script + '"></script>');
import_js_imported.push(script);
}
}
});
})(jQuery);
따라서 모든 가져오기할 JavaScript 가 해야 할 것입니다.
$.import_js('/path_to_project/scripts/somefunctions.js');
예 제가 베지로프도 간단한 테스트를 엔드입니다 emc.
여기에는 '맹자이스' 에서 '는' 다음 주 HTML 파일을 스크립트입니다 맹자이스 가져오기할 니클uded.j스 ',' $ .import_js 추가로 파일 ' ()' 이 함수를 정의하는.
function hello()
{
alert("Hello world!");
}
이 직후 ',' 및 '등 니클uded.j스 누구없어요 ()' 기능을 호출됨 및 확보하십시오 걸렸다.
(이 질문에 대한 응답으로 # 39 는 e-satis&. 주석문입니다).
[1]: http://en.wikipedia.org/wiki/Firebug_% 28software% 29
제 생각에는 있는 다른 방법을 사용하는 대신, Ajax 요청을 동기 보다 깔끔할거야 수 있다 ',' 태그이고, script> <. Node. js 에서 처리하는 방법을 수도 있는 내용.
function require(script) {
$.ajax({
url: script,
dataType: "script",
async: false, // <-- This is the key
success: function () {
// all good...
},
error: function () {
throw new Error("Could not load script " + script);
}
});
}
이 코드에서 # 39 로 사용할 수 있습니다; d you& 일반적으로 사용하는 다음과 같습니다.
require("/scripts/subscript.js");
함수 호출 할 수 있는 필수 스크립트 및 향후 라인:
subscript.doSomethingCool();
좋은 소식이 있을 수 있습니다. 곧 로드하기에 JavaScript 코드를 쉽게 수행할 수 있습니다. 또 표준으로 자리잡을 것으로, 핵심 모듈 임포트하지 길을 JavaScript 코드를 일부라야 JavaScript 할 수 있다.
) 는 다음과 같은 뜻이 있다.
[모듈 로더,] [3] *
[1]: http://en.wikipedia.org/wiki/Ajax_% 28programming% 29
[3]: harmony:module_loaders? id = http://wiki.ecmascript.org/doku.php
Html 문서를 동적으로 생성하는 것이 다른 JavaScript 코드를 내부에서 JavaScript 태그번호 덧붙입니다. 이 목표화된 JavaScript 파일을 불러올 것입니다.
function includeJs(jsFilePath) {
var js = document.createElement("script");
js.type = "text/javascript";
js.src = jsFilePath;
document.body.appendChild(js);
}
includeJs("/path/to/some/file.js");
기술서임을 '가져오기의') 는 ecma 스크립트 6.
문법
import name from "module-name";
import { member } from "module-name";
import { member as alias } from "module-name";
import { member1 , member2 } from "module-name";
import { member1 , member2 as alias2 , [...] } from "module-name";
import name , { member [ , [...] ] } from "module-name";
import "module-name" as name;
아마 내가 찾은 이 페이지에 있는 이 기능을 사용할 수 있습니다 [JavaScript 파일을 포함) 의 javascript 파일을 어떻게 합니까?] [1] :
function include(filename)
{
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.src = filename;
script.type = 'text/javascript';
head.appendChild(script)
}
[1]: http://forums.digitalpoint.com/showthread.php? t = 146094
이것은 동기 없이 버전을 포함한다.
function myRequire( url ) {
var ajax = new XMLHttpRequest();
ajax.open( 'GET', url, false ); // <-- the 'false' makes it synchronous
ajax.onreadystatechange = function () {
var script = ajax.response || ajax.responseText;
if (ajax.readyState === 4) {
switch( ajax.status) {
case 200:
eval.apply( window, [script] );
console.log("script loaded: ", url);
break;
default:
console.log("ERROR: script not loaded: ", url);
}
}
};
ajax.send(null);
}
참고로 afaq afnor apc® 크로스-도메인 서버는 '에서' 헤더입니다 대응 수위를 그 허용하시겠습니까 설정해야 합니다.
그냥 작성했습니까 이 JavaScript 코드를 사용하여 프로토타입 의 DOM 조작):
var require = (function() {
var _required = {};
return (function(url, callback) {
if (typeof url == 'object') {
// We've (hopefully) got an array: time to chain!
if (url.length > 1) {
// Load the nth file as soon as everything up to the
// n-1th one is done.
require(url.slice(0, url.length - 1), function() {
require(url[url.length - 1], callback);
});
} else if (url.length == 1) {
require(url[0], callback);
}
return;
}
if (typeof _required[url] == 'undefined') {
// Haven't loaded this URL yet; gogogo!
_required[url] = [];
var script = new Element('script', {
src: url,
type: 'text/javascript'
});
script.observe('load', function() {
console.log("script " + url + " loaded.");
_required[url].each(function(cb) {
cb.call(); // TODO: does this execute in the right context?
});
_required[url] = true;
});
$$('head')[0].insert(script);
} else if (typeof _required[url] == 'boolean') {
// We already loaded the thing, so go ahead.
if (callback) {
callback.call();
}
return;
}
if (callback) {
_required[url].push(callback);
}
});
})();
사용법:
<script src="prototype.js"></script>
<script src="require.js"></script>
<script>
require(['foo.js','bar.js'], function () {
/* Use foo.js and bar.js here */
});
</script>
<! - begin 스니핏: js 숨기십시오: > 거짓값 -;
<script>
var firstScript = document.getElementsByTagName('script')[0],
js = document.createElement('script');
js.src = 'https://cdnjs.cloudflare.com/ajax/libs/Snowstorm/20131208/snowstorm-min.js';
js.onload = function () {
// do stuff with your dynamically loaded script
snowStorm.snowColor = '#99ccff';
};
firstScript.parentNode.insertBefore(js, firstScript);
</script>
끝 - < 스니핏 >;!
페이스북 (facebook), 정보기술 (it) 의 경우 작동하잖아 사용할 수 있습니다.
첫 번째 이유는 우리가 '대신' 헤드 '또는' 바디입니다 포착하십시오 스크립트입니다 '요소' 가 있지만, 일부 누락된 경우 브라우저 don& 때문에 t # 39 생성하시겠습니까 we& # 39, re 보장할 수 있는 요소 - 스크립트입니다 '' 이 번호요. 자세한 정보 dell. http://www.jspatterns.com/the-ridiculous-case-of-adding-a-script-element/.
'' 순수 JavaScript 에서 스케쳐내 document. write 사용할 수 있습니다.
document.write('<script src="myscript.js" type="text/javascript"></script>');
Jquery 라이브러리를 사용하는 경우 '$ 그제스크리프트' 방법을 사용할 수 있습니다.
$.getScript("another_script.js");
대부분 이 슬라이드에서는 솔루션뀉뀉뀉뀉 로드을 동역학적 것은 아니다. 제가 쓰고 있는 모든 파일을 하나의 파일에 대한 검색 대신 컴파일러와의 어셈블합니다 출력입니다. 동일합니까 [덜] [1] / [자스] [2] 전처리기 계약을 체결한 데 이어 @import CSS '' dell. 규칙. # 39, 아무것도 찾을 수 없는데, 내가 하도 didn& t 이 문제를 해결하는 간단한 도구를 정렬하려면 썼다.
여기서는 컴파일러, https://github.com/dsheiko/jsic, (file-path" ";) '를 대체할 수 있는' $ 가져오기의 요청되었습니다 파일 내용을 안전하게. 다음은 해당 꿀꿀 플러그인에는: https://github.com/dsheiko/grunt-jsic.
Jquery 의 마스터 분기로의 내릴 때, 소스 파일을 하나의 연결 () 이다 '와' 한 '로 시작하는 린트로지제스 우스트로지제스'. 그 날, t # 39 의 소스 코드를 제공하는 만큼 잘 doesn& 디자인 유연성을 발휘할 수 없습니다. 어떻게 함께 체크아웃합니다 작동하잖아 제시카:
var foo = $import("./Form/Input/Tel");
function() {
return {
prop: "",
method: function(){}
}
}
이제 실행하십시오 컴파일러와의:
node jsic.js src/main.js build/mail.js
전체 파일 및 내려받습니다
var foo = function() {
return {
prop: "",
method: function(){}
}
};
[1]: http://en.wikipedia.org/wiki/Less_% 28stylesheetlanguage% 29 [2]: http://en.wikipedia.org/wiki/Sass% 28stylesheet_language% 29
A = {};
A.func1 = function() {
console.log("func1");
}
A.func2 = function() {
console.log("func2");
}
A.func1();
A.func2();
방금 조심해야 할 수 있는 HTML 파일을 포함할 경우에는 스크립트에만. 아래에 있는 순서 같아야 합니다.
<head>
<script type="text/javascript" src="global.js"></script>
<script type="text/javascript" src="file1.js"></script>
<script type="text/javascript" src="file2.js"></script>
<script type="text/javascript" src="main.js"></script>
</head>
1 및 [웹 근로자들은요] 사용하는 경우에 대비해 추가적인 스크립트를 포함할 범위에 대한 해답을 제공하는 '머리' 를 추가 스크립트에만 작업자, 다른 태그 등을 당신꺼에요 작동하지 않습니다.
다행히 [웹 근로자들은요 나름의 '임포르츠립츠' 기능을] [2] 원하는거요 노드전역 기능을 기본 웹 브라우저에 대한 범위에 작업자, 자신을 그 [일부인 사양명세] [3].
또는 tpc. 투표를 위해 오토메이티드 강조표시합니다 두 번째로 높은 질문, 레키레이스 스크립트에만 처리할 수 있는 등 웹 전문가 (호출하십시오 임포르츠립츠 것 자체가 다른 몇 가지 유용한 기능을 갖추고 있지만, '').
[2]: # Importing_scripts_and_libraries https://developer.mozilla.org/en-us/docs/web/api/web_workers_api/basic_usage [3]: https://html.spec.whatwg.org/multipage/workers.html # 임포트하지 스크립트에만 및 라이브러리
하지만 제가 이 질문에 응답을 통해 당혹스럽게, 간단한 문제가 있었습니다.
난 이미 변수 (myVar1) 에 정의된 (미바리아브레스트제스) 의 JavaScript 파일을 사용하도록 한 다른 자바스크립트 파일 (맹자이스).
이를 위해 다음과 같이 했어요.
로드됨 JavaScript 코드를 HTML 파일, 올바른 순서로 미바리아브레스트제스 먼저 맹자이스:
<html>
<body onload="bodyReady();" >
<script src="myvariables.js" > </script>
<script src="main.js" > </script>
<!-- Some other code -->
</body>
</html>
파일: 미바리아브레스트제스
var myVar1 = "I am variable from myvariables.js";
파일: 맹자이스
// ...
function bodyReady() {
// ...
alert (myVar1); // This shows "I am variable from myvariables.js", which I needed
// ...
}
// ...
난 이미 살펴본 한 또 다른 변수로, JavaScript 파일을 사용하여 JavaScript 파일을 포함, t need to, but I didn& # 39 한 또 다른. 그냥 데 필요한 첫 번째 JavaScript 파일이 로드됨 JavaScript 파일이므로 # 39 의 첫 번째 JavaScript file& 후 두 번째, 두 번째 JavaScript 파일을 자동으로 com/go/4e6b330a_kr 액세스할 수 있습니다.
이 구해줬으니 날이라니까요 이렇게 하면 좋겠다.
이 '와 같은 도구를 사용하여 JavaScript 가져오기 구문을 @import css 와 같은 달성하기 위한' 가능하다 '특수' 스미스 그들의 [혼합] () 를 통해 파일 형식 (http://otl. [here] [1]). 응용 프로그램 중 하나를 사용하여 간단히 내가 상상할 수 있을지 알 수 없다, 하지만, 제가 언급한 메서드을 인터일리 don& # 39.
붽뎄 스미스 혼합물) 에 '에서' 파일:
>. 혼합 파일은 단순히 스미스트 스이스 파일로 또는 .css [파일 이름. A >. 혼합 스타일 또는 간단히 파일을 정상 기능을 확장합니다. >. 스크립트입니다 파일이므로 및 조합 가져올 수 있습니다.
예를 들어 ',' s # 39 here& 스미스 결합한 '' 스이스 파일로 여러 파일을 하나의:
// scripts-global.mix.js
// Plugins - Global
@import "global-plugins/headroom.js";
@import "global-plugins/retina-1.1.0.js";
@import "global-plugins/isotope.js";
@import "global-plugins/jquery.fitvids.js";
또한 이 같은 '와' 로 축소 된 scripts-global.js 출력입니다 혼합 버전 ('scripts-global.min.js').
참고: # 39 m not 속해 있는 다른 어떤 식으로든 i&, 이를 사용하는 것보다 더 프런트엔트 개발 도구. 이 질문에 대해 '실천' 스미스 왔는지 빛위에 JavaScript 파일을 볼 수 있다 (이 중 하나로 섞여 상용구) 및 it 가 조금 더 (" " 있으세요?;; 생각해봤죠 혼자). 그럼 내가 깨달은 것은 application-specific 파일 형식 (다소 실망스러운 했다). 그럼에도 불구하고, 지식이 다른 생각 유용할 것입니다.
업데이트 *: 혼합물이 [현재 무료] (http://mixture.io/blog/free/) (오프라인).
업데이트 *: 지금 혼합물이 중단됐다. [이전 혼합 릴리스에서와] (https://github.com/teammixture/mixture.io/issues/6) 가 계속 사용할 수 있습니다.
[1]: http://docs.mixture.io/preprocessors # 믹스