我在 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 …
Script
Next.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
组件?
我在 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) 我想同时运行 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) 我正在使用 webpack。我有两个项目。一种用于前端。一个用于后端。后端也在 javascript 上。所以我将后端与 webpack 捆绑在一起。
捆绑后端后我得到的文件是:
main.js
test1.js
test2.js
test1~test2.js
test1
,test2
和test1~test2.js
文件点播块文件。
现在,我正在输入前端网站的 url,(url 是front-end.website.com/test1
),当发生这种情况时,我正在下载main.js
并test1.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(类似的东西)。
我需要导入一个 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)
我的问题是,为什么我应该使用动态导入而不是通常的导入?
谢谢!!
我们在加载时收到此错误。
\n应用程序首先在 URL 处加载http://localhost:3000/
,然后当我们切换到 ex: french 时,我们会得到http://localhost:3000/fr
,但当我们再次将语言切换到 ex: deutsch 时,我们会得到,http://localhost:3000/de/fr
依此类推。新选择的语言路径插入到第一个选择的语言和根 URL 之间。
另外,如果我们直接转到 ex:http://localhost:3000/fr
我们会以正确的语言登陆正确的页面。
//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) 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 文件和图像。
我正在开发一个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) 我正在使用 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 ×4
next.js ×3
webpack ×3
i18next ×2
backend ×1
css ×1
frontend ×1
jestjs ×1
knex.js ×1
next-i18next ×1
node.js ×1
package ×1
postgresql ×1
react-native ×1
reactjs ×1
sass ×1
ssh ×1