簡體   English   中英

當我需要一個文件夾但似乎不可能時,如何使用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安裝適用於Facebook的Javascript SDK。 在任何人反對之前 ,我絕對知道精簡版( https://developers.facebook.com/docs/javascript/quickstart ),但是該API對我絕對沒有用。 我需要盧卡斯·科斯塔(Lucas Costa)生產的那個,以便能夠更改我的廣告帳戶,而Facebook推薦的腳本未啟用該帳戶。

像往常一樣,安裝說明(請參閱github.com/lucascosta/facebook-js-ads-sdk)是在未知條件下可怕地斷言的,這對我來說是未知的。 我無法使SDK正常運行,並且希望有人明確告訴我該怎么做 問題的症結在於自相矛盾的情況:我應該使用require('...')命令(where ??)來包含SDK(應該保存在哪里?),而require 不能被包含用於文件夾,但用於腳本。 也許應該在某個地方設置了require.config文件,但我不知道,因為就像我說的那樣,這些說明完全繞開了對必要啟動條件的任何提及。

到目前為止,這是我所做的。 我的文件夾結構如下所示(我什至不知道這是否正確,因為沒人在任何地方解釋它!):

[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'); ,將所有內容./js/app腳本main.js的文件夾./js/app中,然后在mainrequire所在的index.php main.js html編寫。 設置一個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搜索:通過以下簡單方法,可以安裝並嵌入Javascript-FB-Ads-SDK:

  1. 通過npm install --save facebook-ads-sdk ,以Lucas Costa的facebook-ads SDK調制npm。
  2. 將此文件夾復制到您網站的體系結構(實際上,您可能只需要一個子文件夾/文件)。
  3. 在HTML中包含腳本(通過<script type='text/javascript' src='...'></script> ),其中src指向facebook-ads-sdk文件夾中的文件: /dist/iife.js
  4. 在頁面的腳本中,您現在可以通過全局變量fb訪問API。

替代3:

3'。 在HTML標頭中,請確保通過<script> -tag包含require.js腳本。 然后在您網站的javascript中將以下命令應用於任何地方:

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

感謝和感謝@SLaks@KhauriMcClain (如果可以的話,我會給您一點積分)來解決此問題。

您需要更改使用require的方式。

  1. 如果以前沒有加載依賴項,則不能使用同步require方法加載它們。 因此const adsSdk = require('facebook-ads-sdk'); 不管用。 您將需要使用require(['name-of-script'], callback)
  2. Require不允許您加載整個文件夾。 您必須找到要使用的確切腳本,因此var adsSdk = require(['sdk']); 不管用。

最終,您的代碼應類似於:

require(['some-facebook-script'], function(someFacebookScript) { // Do some work here });

傳遞給回調函數的參數將是您嘗試使用的已加載模塊。 當使用異步版本時(如我剛剛演示的那樣),require的返回沒有用。

這些說明假設您使用的是捆綁系統,例如Webpack或Browserify。
如果是的話,說明“行之有效”; 您可以require()它,一切都會正常。

如果您要構建一個重要的代碼庫,那么您確實應該使用這樣的系統。

如果不是,則可以在<script>標記中引用iife.js ,這將創建全局變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM