我现在和自耕农打了一段时间.我想知道如何完成自举Backbone应用程序的启动并同时启用require.js.
yeoman init
Run Code Online (Sandbox Code Playgroud)
为我提供了一个可以使用AMD风格模块的设置.
yeoman init backbone:all
Run Code Online (Sandbox Code Playgroud)
为我提供了一个Backbone脚手架,但我必须在index.html中手动"包含"我的所有模型,集合等.
有两种方法可以同时拥有吗?
问菲利克斯
我正在寻找在节点内使用typescript,我目前习惯通过///<reference.../>语法纯粹使用内部模块来使用typescript .但是对于较大的项目,这可能会变得难以处理,因为您可以使用引用其他模块的模块,这些模块都具有相互链接的引用.
所以对于这个节点项目,我正在考虑尝试将所有逻辑组件分组为内部模块/类,就像之前一样,因此它们将在内部相互引用,但是通过一个外部模块公开它们,这将暴露底层类等.
这种方式的语法与现有需要机制的节点非常相似,例如:
import database = require("my-external-db-module.ts");
var connection = new database.Connection(someUrl);
Run Code Online (Sandbox Code Playgroud)
而不是
///<reference path="my-internal-db-modules.ts" />
var connection = new Database.Connection(someUrl);
Run Code Online (Sandbox Code Playgroud)
我想像语法会是这样的:
///<reference path="all-my-internal-module-files-etc.ts" />
///<reference path="..." />
export module SomeExposingModule
{
// Not quite sure what to put in here to expose the internal modules
}
Run Code Online (Sandbox Code Playgroud)
那么有什么样的最佳实践围绕这类事情或任何其他类似的东西,或者每个人都只是坚持使用内部模块来处理复杂的东西?
我正在使用Babel将ES6转换为ES5并且效果很好.唯一的问题是,一旦转换成每个模块重复这些行:
var _get = function get(object, property, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc && desc.writable) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" …Run Code Online (Sandbox Code Playgroud) 将TypeScript与SystemJS一起使用,如何使用?导入JSON文件plugin-json?
如果我写,System.import('myjson.json!json').then(...)那么它会异步导入它,而不是作为其一部分System.register([...]).
那么,我如何导入JSON文件作为一部分System.register([...])并说服TypeScript同意这一点?(没有then Promise语法).
注意:
我正在使用tsc旗帜-m system
一个可能的解决方案是使用-m umd选项tsc代替-m system,然后我可以执行以下操作:
/// <reference path="typings/requirejs/require.d.ts" />
var myJson = require('myJson.json!json')
Run Code Online (Sandbox Code Playgroud)
但是,仍在等待有关使用的答案-m system.
我有一个现有的应用程序,我使用RequireJS定义AMD模块.我在我的项目中广泛使用了"text"和"i18n"插件for requirejs.我最近一直在试验ES6模块,并希望在我的应用程序中创建新模块时使用它们.但是,我想重用现有的AMD模块并在定义我的ES6模块时导入它们.
这甚至可能吗?我知道Traceur和Babel可以从ES6模块创建AMD模块,但这仅适用于不依赖于现有AMD模块的新模块,但我找不到重用现有AMD模块的示例.
任何帮助将不胜感激.这对我来说是一个阻止我开始使用所有ES6好东西.
谢谢
我有一对requirejs插件,我想用webpack加载器替换它.
define('firstLoader', {
load: function (name, parentRequire, onload, config) {
var xhr = new XMLHttpRequest();
xhr.addEventListener('load', function () {onload(this.responseText);});
xhr.addEventListener('error', onload.error);
xhr.addEventListener('abort', onload.error);
var url = '...' + name;
xhr.open('GET', url);
xhr.send()
}
})
define('jsonLoader', {
load: function (name, parentRequire, onload, config) {
//This is the nasty part.
req(['firstLoader!' + name], function (text) {
try {
onload(JSON.parse(text));
}
catch (err) {
onload.error(err);
}
})
}
});
Run Code Online (Sandbox Code Playgroud)
最大的问题是缺乏对异步请求和动态需求的承诺.有没有解决方法没有转换(使用`System.load)或其他库(蓝鸟等)?
所以我对此采取了一个措施,现在我收到了一个错误
Module not found: Error: Can't resolve 'future/url'
当我去的时候require('jsonLoader!future/url').webpack是否允许加载器在运行时运行?这是更新的代码.
firstPlugin.js …
我正在尝试从书签中加载JS文件.JS文件有这个包装模块的JS:
(function (root, factory) {
if (typeof module === 'object' && module.exports) {
// Node/CommonJS
module.exports = factory();
} else if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(factory);
} else {
// Browser globals
root.moduleGlobal = factory();
}
}(this, function factory() {
// module script is in here
return moduleGlobal;
}));
Run Code Online (Sandbox Code Playgroud)
因此,如果网页使用RequireJS,则脚本在加载时不会导出全局.为了解决这个问题我暂时设置define到null,加载脚本,然后重置define为其原始值:
function loadScript(url, cb) {
var s = document.createElement('script');
s.src = url;
s.defer = true; …Run Code Online (Sandbox Code Playgroud) javascript amd global-variables dynamic-script-loading requirejs
这是我的tsconfig.json文件的外观:
{
"compileOnSave": true,
"compilerOptions": {
"module": "amd",
"noImplicitAny": false,
"removeComments": false,
"preserveConstEnums": true,
"strictNullChecks": true,
"sourceMap": false
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个名为a.ts的打字稿文件,它是一个AMD模块(我正在使用requirejs),如下所示:
export function a() {
var a = {
b: 5
};
return a;
}
Run Code Online (Sandbox Code Playgroud)
编译后的Javascript文件如下所示:
define(["require", "exports"], function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function a() {
var a = {
b: 5
};
return a;
}
exports.a = a;
});
Run Code Online (Sandbox Code Playgroud)
我需要生成的JavaScript文件为:
define(function () {
"use strict";
var a = {
b: 5
}; …Run Code Online (Sandbox Code Playgroud) 我有一个简单的文件,我正在使用requireJS加载依赖项define:
define([
"dojo/_base/declare",
"dojo/aspect",
"local/path/to/myFile"
], function(
declare,
aspect,
myFile
) { ...
Run Code Online (Sandbox Code Playgroud)
这应该工作,文件映射在requireJS配置中.
但是,如果我尝试使用绝对路径(完全相同的文件)访问其中一个文件:
define([
"dojo/_base/declare",
"dojo/aspect",
"https://blah.com/absolute/path/to/myFile.js"
], function(
declare,
aspect,
myFile
) { ...
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
"message":"错误:\" https://blah.com/absolute/path/to/myFile.js \"的脚本错误,需要:/home/test_vds_jasmine/test/modules/myFile-spec4.js \nhttp://requirejs.org/docs/errors.html#scripterror \nat /home/node_modules/requirejs/require.js:168:17\n\nmakeError@/home/node_modules/requirejs/require.js:168:17 \nnewContext/context.onScriptError@/home/node_modules/requirejs/require.js:1738:36 \n"个
我已经尝试了所有方式的绝对路径,包括有和没有https,有和没有.js扩展但是我画了一个空白,错误信息根本没有帮助.
我是以错误的方式呼唤绝对的道路吗?有没有人有这样做的经验?
我必须使用绝对路径调用某些文件,或者我只是在本地调用所有文件,这是有正当理由的.
amd ×10
javascript ×7
requirejs ×5
typescript ×3
ecmascript-6 ×2
babeljs ×1
backbone.js ×1
gulp ×1
loader ×1
module ×1
node.js ×1
systemjs ×1
tsc ×1
webpack ×1
yeoman ×1