Javascript 当我需要一个文件夹而这似乎不可能时,如何使用require安装SDK?

Javascript 当我需要一个文件夹而这似乎不可能时,如何使用require安装SDK?,javascript,facebook-graph-api,installation,requirejs,facebook-javascript-sdk,Javascript,Facebook Graph Api,Installation,Requirejs,Facebook Javascript Sdk,问题描述。 我正在尝试安装Facebook的Javascript SDK在任何对象之前,我绝对知道compact版本(),但该API对我来说绝对无用。我需要一个由卢卡斯·科斯塔制作的,以便能够对我的广告帐户进行更改,这是Facebook推荐的脚本无法启用的 像往常一样,安装说明(参见github.com/lucasosta/facebook js ads sdk)都是基于我所不知道的神秘条件。我无法让SDK正常工作,希望有人明确告诉我该做什么。问题的关键是矛盾的情况:我应该使用require(“

问题描述。 我正在尝试安装Facebook的Javascript SDK在任何对象之前,我绝对知道compact版本(),但该API对我来说绝对无用。我需要一个由卢卡斯·科斯塔制作的,以便能够对我的广告帐户进行更改,这是Facebook推荐的脚本无法启用的

像往常一样,安装说明(参见github.com/lucasosta/facebook js ads sdk)都是基于我所不知道的神秘条件。我无法让SDK正常工作,希望有人明确告诉我该做什么。问题的关键是矛盾的情况:我应该使用
require(“…”)
命令(where??)来包含SDK(应该保存在哪里??),但require不能用于文件夹,而是用于脚本。可能在某个地方有一个
require.config
文件,我应该设置它,但我不知道,正如我所说的,这些说明完全没有提到必要的启动条件

以下是我迄今为止所做的工作。我的文件夹结构是这样的(我甚至不知道这是否正确,因为没有人在任何地方解释它!):

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
部分包含适当的脚本。没什么帮助。以下是错误:首先是
constadssdk=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)
Ie,浏览器认为我试图包含一个脚本
facebook ads sdk.js
,但我应该(???)“需要”整个文件夹!发生了什么事有人能给我详细介绍一下必要的文件夹结构和命令吗,以便让这个SDK正常工作?

为什么这在网上描述得如此含糊不清?是否存在某种神秘的安装SDK的方式,而“每个人”都知道,但从未提及


更新:解决方案。对于任何未来谷歌搜索相同的问题:通过以下简单方法,可以安装并嵌入Javascript FB Ads SDK:

  • 通过
    npm安装进行安装——保存facebook ads sdk
    npm module Lucas Costa的facebook ads sdk副本
  • 将此文件夹复制到网站的体系结构(实际上,您可能只需要一个子文件夹/文件)
  • 在HTML中包含脚本(通过
    ),src指向facebook ads sdk文件夹中的文件:
    /dist/iife.js
  • 在页面的脚本中,您现在可以通过全局变量
    fb
    访问then API
  • 除第3条外:

    3'。在HTML标题中,确保通过
    -标记包含
    require.js
    脚本。然后在网站的javascript中,在任何位置应用以下命令:

    require.config({
        paths: {
            'sdk': './[FOLDERNAME OF SDK]/dist/iife',
        }
    });
    require(['sdk']);
    

    感谢@SLaks@KhauriMcClain(如果可以的话,我会给你加分)。

    你需要改变你的使用方式

  • 如果以前未加载依赖项,则不能使用synchronous require方法加载依赖项。因此
    const adsSdk=require('facebook-ads-sdk')将不起作用。您需要使用表单
    require(['name-of-script'],callback)
  • Require不允许您加载整个文件夹。您必须找到您正试图使用的确切脚本,因此
    var adsSdk=require(['sdk'])将不起作用
  • 最终,您的代码应该如下所示:

    require(['some-facebook-script'],函数(someFacebookScript){
    //在这里做些工作
    });


    传递给回调函数的参数将是您尝试使用的已加载模块。当使用异步版本时(正如我刚才演示的),从require返回是没有用的。

    说明假定您使用的是像Webpack或Browserify这样的捆绑系统。
    如果是,说明“只要工作”;你可以
    require()
    it,一切都会好起来的

    如果您正在构建一个非平凡的代码库,那么您真的应该使用这样一个系统


    如果没有,您可以在
    标记中引用
    iife.js
    ,这将创建全局变量。

    您是在浏览器中运行还是在NodeJS中运行?您是否在浏览器上使用npm。试过了,有没有npm的本地副本。我应该如何在整个文件夹上使用require?您应该以加载其余代码的相同方式加载它,如第一段所述:
    ECMAScript 5捆绑的带sourcemaps的小型发行版也可以作为AMD和CommonJS模块,作为IIFE(在fb变量下)使用,如果您需要,也可以作为UMD使用,甚至作为浏览器的全局浏览器。
    @
    require.config({
        paths: {
            'sdk': './[FOLDERNAME OF SDK]/dist/iife',
        }
    });
    require(['sdk']);