小编fel*_*osh的帖子

Github 操作 - 如何使用 SSH 部署到远程服务器

我在 DO 上有一个临时服务器。

我想为它构建和部署我的节点应用程序。

name: Build & Deploy
on:
  push:
    tags:
      - 'v1.*.0'
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Create SSH key
        run: |
          mkdir -p ~/.ssh/
          echo "$DO_GITHUB_PRIVATE_KEY" > ../github_do.key
          sudo chmod 600 ../github_do.key
          ssh-keyscan -H ${{secrets.DEPLOY_SERVER}} > ~/.ssh/known_hosts
        shell: bash
        env:
          DO_GITHUB_PRIVATE_KEY: ${{secrets.DO_GITHUB_PRIVATE_KEY}}
      - uses: actions/setup-node@v1
        with:
          node-version: 12.x
      - name: Install Packages
        run: yarn install --frozen-lockfile
      - name: Build artifacts
        env:
          DEPLOY_SSH_KEY_PATH: ${{ github.workspace }}/../github_do.key
        run: |
          yarn shipit production fast-deploy
Run Code Online (Sandbox Code Playgroud)

我所做的是生成一个新的 SSH …

ssh github-actions

19
推荐指数
3
解决办法
1万
查看次数

如何使用 next/script 组件 (Next.js 11) 加载 Google 跟踪代码管理器?

ScriptNext.js v11 发布了一个具有不同策略的新组件。

建议加载带afterInteractive策略的 Google TagManager。

我试过了

// _app.js

import Script from 'next/script';

class MyApp extends App {
  public render() {
    const { Component, pageProps } = this.props;

    return (
      <>
        <Script strategy="afterInteractive">
          {`(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':` +
            `new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],` +
            `j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=` +
            `'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);` +
            `})(window,document,'script','dataLayer','GTM-XXXXXXX');`}
        </Script>
        <Component {...pageProps} />
      </>
    );
  }
}

export default MyApp;
Run Code Online (Sandbox Code Playgroud)

它工作正常,它加载谷歌标签管理器,但问题是它在每个页面导航上注入相同的脚本,这会产生重复的标签。

如何使用新Script组件?

javascript google-tag-manager next.js

18
推荐指数
2
解决办法
1万
查看次数

在组件外部使用 React-i18next 中的 t()

我在 React Native 应用程序中使用 i18next 和 react-i18next ,更具体地说是输入验证。我试图将 t() 作为 no 组件中的参数传递,但收到错误“TypeError: n 不是函数。(在 'n('errorMessages.emailNoMatch')' 中,'n' 未定义) ”。非常感谢任何建议,因为我对编码相对较新,并且我已经为此问题搜索了几天。

这是 i18n.js 代码:

import i18next from 'i18next';
import common_de from './translations/de/common.json';
import common_en from './translations/en/common.json';
import i18n from 'i18n-js';
import * as Localization from 'expo-localization';
// Set up translations
i18next.init({
  interpolation: { escapeValue: false }, // React already does escaping
  lng: 'en', // language to use
  resources: {
    de: {
      common: common_de, // 'common' is our custom namespace
    },
    en: {
      common: …
Run Code Online (Sandbox Code Playgroud)

i18next react-native react-i18next react-component

8
推荐指数
1
解决办法
2万
查看次数

如何在 Jest 中运行并发测试,每个请求进行多个测试?

我想同时运行 Jest 测试,但我在一种情况下遇到问题:

我正在端点上测试结果,并且我想测试有关它的多项内容。因此,在 beforeAll 函数中,我发出请求并存储响应,然后在多个测试中测试响应。这可以很好地同步工作,但是当我使测试并发时,它不再允许您将变量传递到测试中,所以这是行不通的。或者,我可以将请求放在测试本身中,然后期望有关响应的许多信息,但是如果出现故障,我就没有粒度来查看出了什么问题。

对于这种情况有什么解决方案吗?

这有效:

let data;

beforeAll(async () => {
  data = await getDataFromRequest();
});

it('value1 should be truthy', () => {
  expect(data.value1).toBeTruthy();
});

it('value2 should be truthy', () => {
  expect(data.value2).toBeTruthy();
});
Run Code Online (Sandbox Code Playgroud)

这也有效:

it.concurrent('data should have correct values', async () => {
  const data = await getDataFromRequest();
  expect(data.value1).toBeTruthy();
  expect(data.value2).toBeTruthy();
});
Run Code Online (Sandbox Code Playgroud)

但我想要的是:

let data;

beforeAll(async () => {
  data = await getDataFromRequest();
});

it.concurrent('value1 should be truthy', () => {
  expect(data.value1).toBeTruthy();
});

it.concurrent('value2 should be truthy', …
Run Code Online (Sandbox Code Playgroud)

jestjs

7
推荐指数
1
解决办法
2万
查看次数

webpack 和两个不同的来源网站

我正在使用 webpack。我有两个项目。一种用于前端。一个用于后端。后端也在 javascript 上。所以我将后端与 webpack 捆绑在一起。

捆绑后端后我得到的文件是:

  1. main.js
  2. test1.js
  3. test2.js
  4. test1~test2.js

test1test2test1~test2.js文件点播块文件。

现在,我正在输入前端网站的 url,(url 是front-end.website.com/test1),当发生这种情况时,我正在下载main.jstest1.js立即执行。之后,我应该点击一个按钮,点击后,axios应该请求 fetch test1~test2.js。正如你所见和我所说的,test1~test2.js应该延迟加载,这就是发生的事情,但是.....

问题:当请求test1~test2.js发生时,请求不会发送到后端源,而是前端源,这会导致文件无法加载,因为前端不存在该文件。看起来像main.js,有一个延迟加载的代码,test1~test2.js但它没有完整的原始路径,当前端尝试加载它时,它认为它应该从自身加载。

我该如何解决?

解决方法(但我讨厌这个):我尝试在后端的 webpack 配置中使用 publicPath,例如:https://back-end.website.com,但这导致的是当请求被发送到后端时,对于哪个文件无关紧要,请求的实际 url 变为https://back-end.website.com/http://back-end.website.com/file(类似的东西)。

javascript webpack webpack-dev-server

7
推荐指数
1
解决办法
212
查看次数

无法在 Next.js 模块外部使用 import 语句

我需要导入一个 npm 包,但当我使用这样的“import”语句时失败

import { cuteLuna } from 'lunacomponent';
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:无法在模块外部使用 import 语句

当我将其更改为动态导入后,它就可以工作了。

const cuteLuna = dynamic(() => import('lunacomponent').then((a) => a.cuteLuna), {ssr: false});
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么我应该使用动态导入而不是通常的导入?

谢谢!!

package reactjs next.js

7
推荐指数
1
解决办法
8525
查看次数

Next.js 出现 i18n 错误:警告:文本内容不匹配。服务器:“”客户端:“fr”

我们在加载时收到此错误。

\n

应用程序首先在 URL 处加载http://localhost:3000/,然后当我们切换到 ex: french 时,我们会得到http://localhost:3000/fr,但当我们再次将语言切换到 ex: deutsch 时,我们会得到,http://localhost:3000/de/fr依此类推。新选择的语言路径插入到第一个选择的语言和根 URL 之间。

\n

另外,如果我们直接转到 ex:http://localhost:3000/fr我们会以正确的语言登陆正确的页面。

\n
//i18n.js\nconst NextI18Next = require(\'next-i18next\').default;\n\nmodule.exports = new NextI18Next({\n  defaultLanguage: \'en\',\n  otherLanguages: [\'fr\', \'de\', \'nl\', \'it\', \'pt\', \'es\'],\n  localeSubpaths: {\n    en: \'en\',\n    fr: \'fr\',\n    de: \'de\',\n    nl: \'nl\',\n    it: \'it\',\n    es: \'es\',\n    pt: \'pt\',\n  },\n});\n
Run Code Online (Sandbox Code Playgroud)\n
//next.config.js\n\nconst isProd = process.env.NODE_ENV === \'production\';\n\nmodule.exports = {\n  exportPathMap: async function (defaultPathMap, { dev, dir, outDir, distDir, buildId }) {\n    return …
Run Code Online (Sandbox Code Playgroud)

i18next next.js next-i18next

7
推荐指数
1
解决办法
1616
查看次数

webpack:是否可以将 SCSS 编译成 CSS?

const path = require('path');

module.exports = {
  entry: './src/scss/screen.scss',

  output: {
    filename: 'screen.css',
    path: path.resolve(__dirname, 'dist'),
  },

  module: {
    rules: [
        {
          test: /\.scss$/,
          use: [
          'style-loader',
            'css-loader',
            'sass-loader'
          ]
        },
      {
        test: /\.jpg$/,
        use: [
          'file-loader',
        ],
      },
    ]
  }
};
Run Code Online (Sandbox Code Playgroud)

这是我的webpack.config.js。当我尝试将 SCSS 编译成 CSS 时,它会创建screen.css文件而没有任何抱怨,但其中screen.css包含 javascript 代码(我猜来自其中一个加载程序)。

当项目实际上没有任何 javascript 文件时,甚至可以使用 webpack 吗?我只有 SCSS 文件和图像。

css frontend sass webpack

6
推荐指数
1
解决办法
5481
查看次数

Webpack插件:如何动态地将模块添加到主Chunk?

我正在开发一个Webpack插件,它基本上css在块中寻找资源,当它找到这样的资产时,在它上面应用一些postCSS返回2个输出的插件,应该继续使用它来提取Extract-Text-Plugin,其他输出应该成为一个新的模块内部,它注入到头部上运行.

我没有设法实现的唯一部分是在现有 Chunk 中创建新模块的部分.有一些指示/想法?

我设法创建了一个新的块,但没有webpack包装器,这意味着我无法支持HMR用于那块css并且懒得加载它.

class ExtractTPAStylePlugin {
  constructor(options) {
    this._options = Object.assign({
      pattern: [
        /"\w+\([^\)]+\)"/
      ]
    }, options);
  }

  extract(compilation, chunks) {
    const promises = [];

    chunks.forEach((chunk) => {
      promises.push(
        chunk.files
          .filter(fileName => fileName.endsWith('.css'))
          .map(file => postcss([extractStyles(this._options)])
            .process(compilation.assets[file].source(), {from: file, to: file})
            .then((result) => {
              compilation.assets[file] = new RawSource(result.css);

              const filename = file.replace('.css', fileSuffix);
              const newChunk = new Chunk(filename);
              newChunk.files = [filename];
              newChunk.ids = …
Run Code Online (Sandbox Code Playgroud)

javascript webpack webpack-plugin extracttextwebpackplugin

6
推荐指数
1
解决办法
921
查看次数

在 Node.js 和 Knex 中向现有表添加一列

我正在使用 Node.js 和 Knex 为我的路由器构建服务。但是,我无法弄清楚如何向现有表中添加一列,任何帮助将不胜感激。另外,我正在使用 PostgreSQL,但我认为这对这个问题并不重要。

所以,这就是我向表中添加行的方法:

insertData(knex, table, row) {
  return knex
    .insert(row)
    .into(table)
    .returning('*')
    .then(rows => {
      return rows[0];
    });
}
Run Code Online (Sandbox Code Playgroud)

我猜在表中添加一列会与此类似吗?我只是无法弄清楚/找到解决方案。

javascript postgresql backend node.js knex.js

6
推荐指数
3
解决办法
9023
查看次数