当我需要一个文件夹并且这似乎不可能时,如何使用 require 安装 SDK?
how do I install an SDK using require, when I need to require an folder and this seems impossible?
问题描述。
我正在尝试关注 https://github.com/lucascosta/facebook-js-ads-sdk to install the Javascript SDK for Facebook. Before anyone objects, I am absolutely aware of the compact version (https://developers.facebook.com/docs/javascript/quickstart),但是 API 对我来说绝对没用。我需要 Lucas Costa 制作的那个,以便能够更改我的广告帐户,Facebook 推荐的脚本无法启用。
像往常一样,安装说明(参见 github.com/lucascosta/facebook-js-ads-sdk)可怕地基于我不知道的神秘条件。我无法让 SDK 工作,希望有人明确告诉我该做什么。问题的症结在于自相矛盾的情况:我应该使用 require('...')
命令(在哪里??)来包含 SDK(这应该保存在哪里??)却需要 不能 用于文件夹,但用于脚本。也许某处有一个 require.config
文件,我应该设置它,但我不知道,就像我说的那样,这些说明完全绕过了任何必要的启动条件。
这是我到目前为止所做的。我的 folder-structure 看起来像这样(我什至不知道这是否正确,正如 no-one 在任何地方解释的那样!):
[Serverroot]
— [folder with my website]
– facebook-ads-sdk (the folder one gets by downloading)
– css — pagestyles.css
– js — lib
require.js
— app
( some header scripts )
– img
( some images )
index.php
在 index.php
中,我有一段 html,然后是一些 javascript。正是在这里,我尝试从 .浏览器甚至无法通过 const adsSdk = require('facebook-ads-sdk');
行。我尝试了很多方法:require('./facebook-ads-sdk');
,将所有这些移动到脚本 main.js
中的文件夹 ./js/app
,然后在 index.php
中写入我的 html,其中main
和 require
位于。设置 require.config
(或 requirejs.config
)用 requirejs
替换 require
等,并在 index.php
的 <head>
部分包含适当的脚本.没有任何帮助。以下是错误:首先使用 const adsSdk = require('facebook-ads-sdk');
我得到
Error: Module name "facebook-ads-sdk" has not been loaded yet for context: _. Use require([])
好的。我如何“为上下文加载模块”?阅读 requirejs.org/docs/start.html 在这里没有帮助。我试过 require([], function() {require('facebook-ads-sdk')});
同样的错误。我试过了 require(['facebook-ads-sdk']);
我尝试在 index.php
的脚本中使用以下命令:
require.config({
shim: {
'facebook': {
exports: 'adsSdk',
},
},
paths: {
'sdk': './facebook-ads-sdk',
}
});
var adsSdk = require(['sdk']);
然后我得到错误
Failed to load resource: http:// .... /facebook-ads-sdk.js the server responded with a status of 404 (Not Found)
即,浏览器认为我试图包含一个脚本 facebook-ads-sdk.js
,但我应该(???)“要求”整个文件夹!到底是怎么回事? 谁能给我关于必要的文件夹结构和命令的详细说明,以便让这个 SDK 正常工作?
为什么网上对这件事的描述如此含糊不清?有没有什么神秘的SDK安装方式,“人尽皆知”,却从未提及?
更新:解决方案。对于任何未来google-searches同样的问题:通过以下简单的方法,可以安装和嵌入Javascript-FB-Ads-SDK:
- 通过
npm install --save facebook-ads-sdk
npm 模块 Lucas Costa 的 facebook-ads SDK 的副本安装。
- 将此文件夹复制到您网站的架构中(实际上您可能只需要一个子文件夹/文件)。
- 在您的 HTML 中包含脚本(通过
<script type='text/javascript' src='...'></script>
),其中 src 指向 facebook-ads-sdk 文件夹中的文件:/dist/iife.js
.
- 在您页面的脚本中,您现在可以通过全局变量
fb
. 访问 API
替代 3:
3'。在您的 HTML headers 中确保通过 <script>
标签包含 require.js
脚本。然后在您网站的 javascript 的任意位置应用以下命令:
require.config({
paths: {
'sdk': './[FOLDERNAME OF SDK]/dist/iife',
}
});
require(['sdk']);
感谢并特别感谢 @SLaks 和 @KhauriMcClain(如果可以的话,我会给你 up-points)对于此解决方案。
您需要更改使用 require 的方式。
- 之前没有加载过的依赖不能使用同步require方式加载。因此
const adsSdk = require('facebook-ads-sdk');
将不起作用。您将需要使用 require(['name-of-script'], callback)
. 形式
- Require 不允许您加载整个文件夹。您必须找到您尝试使用的确切脚本,因此
var adsSdk = require(['sdk']);
将不起作用。
最终您的代码应该类似于:
require(['some-facebook-script'], function(someFacebookScript) {
// Do some work here
});
传递给回调函数的参数将是您尝试使用的已加载模块。使用异步版本时(正如我刚刚演示的那样),require 中的 return 没有用。
这些说明假设您使用的是 Webpack 或 Browserify 等捆绑系统。
如果是,说明"just work";你可以 require()
它,一切都会正常。
如果您要构建一个重要的代码库,您确实应该使用这样的系统。
如果不是,您可以在 <script>
标记中引用 iife.js
,这将创建全局变量。
问题描述。 我正在尝试关注 https://github.com/lucascosta/facebook-js-ads-sdk to install the Javascript SDK for Facebook. Before anyone objects, I am absolutely aware of the compact version (https://developers.facebook.com/docs/javascript/quickstart),但是 API 对我来说绝对没用。我需要 Lucas Costa 制作的那个,以便能够更改我的广告帐户,Facebook 推荐的脚本无法启用。
像往常一样,安装说明(参见 github.com/lucascosta/facebook-js-ads-sdk)可怕地基于我不知道的神秘条件。我无法让 SDK 工作,希望有人明确告诉我该做什么。问题的症结在于自相矛盾的情况:我应该使用 require('...')
命令(在哪里??)来包含 SDK(这应该保存在哪里??)却需要 不能 用于文件夹,但用于脚本。也许某处有一个 require.config
文件,我应该设置它,但我不知道,就像我说的那样,这些说明完全绕过了任何必要的启动条件。
这是我到目前为止所做的。我的 folder-structure 看起来像这样(我什至不知道这是否正确,正如 no-one 在任何地方解释的那样!):
[Serverroot]
— [folder with my website]
– facebook-ads-sdk (the folder one gets by downloading)
– css — pagestyles.css
– js — lib
require.js
— app
( some header scripts )
– img
( some images )
index.php
在 index.php
中,我有一段 html,然后是一些 javascript。正是在这里,我尝试从 .浏览器甚至无法通过 const adsSdk = require('facebook-ads-sdk');
行。我尝试了很多方法:require('./facebook-ads-sdk');
,将所有这些移动到脚本 main.js
中的文件夹 ./js/app
,然后在 index.php
中写入我的 html,其中main
和 require
位于。设置 require.config
(或 requirejs.config
)用 requirejs
替换 require
等,并在 index.php
的 <head>
部分包含适当的脚本.没有任何帮助。以下是错误:首先使用 const adsSdk = require('facebook-ads-sdk');
我得到
Error: Module name "facebook-ads-sdk" has not been loaded yet for context: _. Use require([])
好的。我如何“为上下文加载模块”?阅读 requirejs.org/docs/start.html 在这里没有帮助。我试过 require([], function() {require('facebook-ads-sdk')});
同样的错误。我试过了 require(['facebook-ads-sdk']);
我尝试在 index.php
的脚本中使用以下命令:
require.config({
shim: {
'facebook': {
exports: 'adsSdk',
},
},
paths: {
'sdk': './facebook-ads-sdk',
}
});
var adsSdk = require(['sdk']);
然后我得到错误
Failed to load resource: http:// .... /facebook-ads-sdk.js the server responded with a status of 404 (Not Found)
即,浏览器认为我试图包含一个脚本 facebook-ads-sdk.js
,但我应该(???)“要求”整个文件夹!到底是怎么回事? 谁能给我关于必要的文件夹结构和命令的详细说明,以便让这个 SDK 正常工作?
为什么网上对这件事的描述如此含糊不清?有没有什么神秘的SDK安装方式,“人尽皆知”,却从未提及?
更新:解决方案。对于任何未来google-searches同样的问题:通过以下简单的方法,可以安装和嵌入Javascript-FB-Ads-SDK:
- 通过
npm install --save facebook-ads-sdk
npm 模块 Lucas Costa 的 facebook-ads SDK 的副本安装。 - 将此文件夹复制到您网站的架构中(实际上您可能只需要一个子文件夹/文件)。
- 在您的 HTML 中包含脚本(通过
<script type='text/javascript' src='...'></script>
),其中 src 指向 facebook-ads-sdk 文件夹中的文件:/dist/iife.js
. - 在您页面的脚本中,您现在可以通过全局变量
fb
. 访问 API
替代 3:
3'。在您的 HTML headers 中确保通过 <script>
标签包含 require.js
脚本。然后在您网站的 javascript 的任意位置应用以下命令:
require.config({
paths: {
'sdk': './[FOLDERNAME OF SDK]/dist/iife',
}
});
require(['sdk']);
感谢并特别感谢 @SLaks 和 @KhauriMcClain(如果可以的话,我会给你 up-points)对于此解决方案。
您需要更改使用 require 的方式。
- 之前没有加载过的依赖不能使用同步require方式加载。因此
const adsSdk = require('facebook-ads-sdk');
将不起作用。您将需要使用require(['name-of-script'], callback)
. 形式
- Require 不允许您加载整个文件夹。您必须找到您尝试使用的确切脚本,因此
var adsSdk = require(['sdk']);
将不起作用。
最终您的代码应该类似于:
require(['some-facebook-script'], function(someFacebookScript) {
// Do some work here
});
传递给回调函数的参数将是您尝试使用的已加载模块。使用异步版本时(正如我刚刚演示的那样),require 中的 return 没有用。
这些说明假设您使用的是 Webpack 或 Browserify 等捆绑系统。
如果是,说明"just work";你可以 require()
它,一切都会正常。
如果您要构建一个重要的代码库,您确实应该使用这样的系统。
如果不是,您可以在 <script>
标记中引用 iife.js
,这将创建全局变量。